Có thể sử dụng giới hạn ngữ cảnh trong bí danh loại trong Scala không?Sử dụng ngữ cảnh bị ràng buộc trong bí danh loại
ví dụ
type U = A : B
Có thể sử dụng giới hạn ngữ cảnh trong bí danh loại trong Scala không?Sử dụng ngữ cảnh bị ràng buộc trong bí danh loại
ví dụ
type U = A : B
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.
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)
Đây phải là câu trả lời được chấp nhận –
Cảm ơn. Điều này thật ý nghĩa. –