da Scala 2.8 tipi parametrizzati in poi sono state offerto funzionalità ancora più vincolo tramite classi di vincolo tipo generalizzato. Queste classi consentono ulteriore specializzazione nei metodi, e complementare limiti contesto, come segue:
A =: = B asserisce che A e B devono essere uguali
A <: < B asserisce che A deve essere un sottotipo di B
Un esempio di utilizzo di queste classi è l'abilitazione di una specializzazione per l'aggiunta di elementi numerici in una raccolta o per la formattazione di stampa personalizzata o per consentire calcoli di responsabilità personalizzati su tipi specifici di scommessa o fondo in un portafoglio di operatori . Per esempio:
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
è possibile trovare un intero corso breve di tipi Scala qui: http://scalabound.org/?p=323
fonte
2011-06-21 09:35:24
Ci scusiamo per la duplicazione, ma ancora una volta, non è possibile cercare la stringa "=: =" ... – paradigmatic