Từ Scala 2,8 loại trở đi tham số đã được dành thậm chí khả năng hạn chế hơn thông qua các lớp học hạn chế loại khái quát hóa. Những lớp học cho phép chuyên môn hóa hơn nữa trong phương pháp, và bổ sung cho vọt bối cảnh, như sau:
A =: = B khẳng định rằng A và B phải được bình đẳng
Một <: < B khẳng định rằng A phải một subtype của B
Việc sử dụng mẫu của các lớp này sẽ cho phép chuyên môn bổ sung các phần tử số trong bộ sưu tập hoặc định dạng in riêng biệt hoặc cho phép tính toán trách nhiệm tùy chỉnh đối với các loại đặt cược hoặc quỹ cụ thể trong danh mục nhà giao dịch . Ví dụ:
case class PrintFormatter[T](item : T) {
def formatString(implicit evidence: T =:= String) = { // Will only work for String PrintFormatters
println("STRING specialised printformatting...")
}
def formatPrimitive(implicit evidence: T <:< AnyVal) = { // Will only work for Primitive PrintFormatters
println("WRAPPED PRIMITIVE specialised printformatting...")
}
}
val stringPrintFormatter = PrintFormatter("String to format...")
stringPrintFormatter formatString
// stringPrintFormatter formatPrimitive // Will not compile due to type mismatch
val intPrintFormatter = PrintFormatter(123)
intPrintFormatter formatPrimitive
// intPrintFormatter formatString // Will not compile due to type mismatch
Bạn có thể tìm một khóa học toàn bộ ngắn về Scala loại ở đây: http://scalabound.org/?p=323
Nguồn
2011-06-21 09:35:24
Xin lỗi vì trùng lặp, nhưng một lần nữa, bạn không thể tìm kiếm chuỗi "=: =" ... – paradigmatic