De Scala 2.8 en adelante tipos parametrizados se ha concedido aún más las capacidades de restricciones a través de clases de restricción de tipo generalizado. Estas clases permiten una mayor especialización en los métodos, y se complementan fuera de contexto, como sigue:
A =: = B afirma que A y B deben ser el igual
A <: < B afirma que A debe ser un subtipo de B
Un ejemplo de uso de estas clases sería habilitar una especialización para agregar elementos numéricos en una colección, o para el formato de impresión a medida, o para permitir cálculos de responsabilidad personalizada en tipos específicos de apuestas o fondos en una cartera de traders . Por ejemplo:
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
se puede encontrar una breve curso entero sobre los tipos de Scala aquí: http://scalabound.org/?p=323
Perdón por la duplicación, pero de nuevo, no es posible buscar la cadena "=: =" ... – paradigmatic