Một vài câu hỏi phát sinh trong khi tôi đang đọc 7.3.2 Ghi lại các ràng buộc loại từ Scala của chiều sâu của Joshua. Ví dụ trích từ cuốn sách:Làm thế nào để ẩn <: <giúp tìm các thông số kiểu
scala> def peek[C, A](col: C)(implicit ev: C <:< Traversable[A]) = (col.head, col)
peek: [C, A](col: C)(implicit ev: <:<[C,Traversable[A]])(A, C)
scala> peek(List(1, 2, 3))
res9: (Int, List[Int]) = (1,List(1, 2, 3))
Có vẻ như đơn giản mà C
được tìm thấy là List[Int]
bởi 1 danh sách tham số . Và cách thức ràng buộc loại thực thi <:<
bằng phương sai được giải thích trong sách. Nhưng tôi hoàn toàn không thấy cách giúp tìm A
.
Sự hiểu biết của tôi là, từ danh sách tham số 1, scala phát hiện ra C: List[Int]
, sau đó tìm kiếm implicit ev: <:<[List[Int], Traversable[A]]
. Hiện tại, A
vẫn chưa được biết. Nó "kéo" hai implicits conforms[List[Int]]
và conforms[Traversable[A]]
đến khớp với ev
. Trong cả hai trường hợp để thỏa mãn phương sai, List[Int] <: Traversable[A]
phải được thỏa mãn, dẫn đến kết quả là A
là Int
.
Ứng dụng có hoạt động như những gì tôi mô tả ở đây không? Đặc biệt là làm thế nào/khi A
được suy luận.
Có, nó hoạt động như bạn mô tả. – pedrofurla
@pedrofurla cảm ơn bạn – cfchou
@pedrofurla Bạn có thể muốn gửi câu trả lời đó dưới dạng câu trả lời :) – huitseeker