Ниже приведены две частичные функции, которые, как ожидается, будут выполнять задачи, но определяются различными способами.прямое применение функции подъема не дает ожидаемой функции
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)
Почему проходит нуль в lift2 дает MatchError, когда определение как Lift1 и lift2 такое же?
Jeez, ребята, комментарий _the difference_. Я потратил 10 минут, глядя на пустое пространство между 'if' и' s (', пытаясь понять, почему это важно. (Подскажите для всех остальных, это' '' после объявления типа. – Malvolio