[FIXED] Warum funktioniert die implizite Konvertierung nicht mit PartialFunction

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)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like