Ausgabe
Angenommen, ich definiere Folgendes:
type Func1 = PartialFunction[Int, String]
case class A(f: Int => String)
implicit def toA(func: Func1): A = A(func(_))
Dann möchte ich vielleicht die implizite Konvertierung so verwenden:
val a: A = {
case i: Int => i.toString
}
Aber das kompiliert jetzt. Die explizite Verwendung der Funktion ist jedoch in Ordnung:
val a: A = toA({
case i: Int => i.toString
})
Warum ist das?
Lösung
val f = {
case i: Int => i.toString
}
kompiliert auch nicht:
fehlender Parametertyp für erweiterte Funktion
Die Argumenttypen einer anonymen Funktion müssen vollständig bekannt sein. ( SLS 8.5 )
Erwarteter Typ war:
?
val f = {
Laut Scaladocs ist Arbeitscode
val f: PartialFunction[Int, String] = {
case i: Int => i.toString
}
Wenn Sie eine implizite Konvertierung wünschen, versuchen Sie es
val a: A = {
case i: Int => i.toString
} : PartialFunction[Int, String]
Beantwortet von – Dmytro Mitin
Antwort geprüft von – Dawn Plyler (FixError Volunteer)