Unten sind die zwei Teilfunktionen aufgeführt, von denen erwartet wird, dass sie sme-Aufgaben ausführen, die jedoch auf verschiedene Arten definiert sind. direkte Anwendung der Lift-Funktion keine erwartete Funktion geben
val pf1 : PartialFunction[String, String] = {
case s : String if (s != null) => s.toUpperCase()
}
//> pf1 : PartialFunction[String,String] = <function1>
val lift1 = pf1.lift
//> lift1 : String => Option[String] = <function1>
val d1 = lift1(null)
//> d1 : Option[String] = None
val d2 = lift1("hello world")
//> d2 : Option[String] = Some(hello world)
val pf2 = PartialFunction[String, String] {
case s : String if(s != null) => s.toUpperCase()
}
//> pf2 : PartialFunction[String,String] = <function1>
val lift2 = pf2.lift
//> lift2 : String => Option[String] = <function1>
val d3 = lift2(null)
//> scala.MatchError: null
val d4 = lift2("hii")
//> d4 : Option[String] = Some(hii)
Warum LIFT2 null vorbei gibt MatchError, wenn die Definition der beiden LIFT1 und LIFT2 gleiche ist?
Jeez, Leute, kommentieren _der Unterschied_. Ich starrte 10 Minuten lang auf den weißen Zwischenraum zwischen 'if' und' s ('und versuchte herauszufinden, warum das wichtig war.) (Hinweis für alle anderen, es ist das' '' nach der Typdeklaration, die zählt. – Malvolio