2010-09-26 1 views
8

Trong dự án scala-cánh tay, tôi thấy mã như thế này:":" trong tham số kiểu

def managed[A : Resource : Manifest](opener : => A) : ManagedResource[A] = new DefaultManagedResource(opener) 

Ai đó có thể giải thích ý nghĩa của [A: Resource: Manifest]?

+4

http://stackoverflow.com/questions/2982276/what-is-a-context-bound-in-scala – retronym

Trả lời

18
def managed[A : Resource : Manifest](opener : => A) : ManagedResource[A] = new DefaultManagedResource(opener) 

nghĩa

def managed[A](opener : => A)(implicit r: Resource[A], m: Manifest[A]) : ManagedResource[A] = new DefaultManagedResource(opener) 

Bạn có thể ghé link text7.4 Bối cảnh Bounds và Xem Bounds để biết thêm thông tin.

4

Sử dụng một ví dụ đơn giản để minh họa:

def method[T : Manifest](param : T) : ResultType[T] = ... 

Ký hiệu T : Manifest có nghĩa là có một bối cảnh ràng buộc. Ở những nơi khác trong chương trình của bạn, trong phạm vi, phải được xác định một đơn hoặc giá trị loại Manifest[T] được đánh dấu là ẩn.

Điều này đạt được bởi trình biên dịch viết lại chữ ký phương pháp sử dụng một khối (implicit) tham số thứ hai:

def method[T](param : T)(implicit x$1 : Manifest[T]) : ResultType[T] = ... 

Như ví dụ của bạn minh họa, nhiều giới hạn bối cảnh có thể được sử dụng trong chữ ký phương pháp tương tự. Nó cũng có thể kết hợp chúng với giới hạn khung nhìn.