2012-03-13 23 views

Trả lời

12

Không, bởi vì bối cảnh bị ràng buộc thực sự là một viết tắt cho một tham số ngầm thêm.

Ví dụ:

def sort[A : Ordering](xs: Seq[A]) 

là một hình thức viết tắt cho

def sort[A](xs: Seq[A])(implicit ordering: Ordering[A]) 

và điều này không thể được đại diện trong một định nghĩa kiểu.

+0

Cảm ơn. Điều này thật ý nghĩa. –

12

Thay vì có ngữ cảnh được ràng buộc trực tiếp trong khai báo kiểu, bạn phải có một khai báo giá trị riêng biệt đại diện cho tham số ngầm được đề cập bởi JPP.

Ai xác định loại cũng sẽ phải cung cấp bằng chứng cho bối cảnh bị ràng buộc:

trait Generic { 
    type U 
    implicit val ordering: Ordering[U] // evidence for U: Ordering 

    def max(u1: U, u2: U) = List(u1, u2).max 
} 

def concrete[T: Ordering] = new Generic { 
    type U = T 
    val ordering = implicitly[Ordering[T]] 
} 

assert(concrete[Int].max(1,3) == 3) 
+2

Đây phải là câu trả lời được chấp nhận –

Các vấn đề liên quan