以下是兩個部分功能,預計執行sme任務,但以不同方式定義。直接應用提升功能不給予預期功能
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)
爲什麼傳遞null到lift2給MatchError,當兩個lift1和lift2的定義是一樣的嗎?
Jeez,夥計,評論_的差異。我花了10分鐘盯着'if'和's'之間的空格(',試圖弄清楚爲什麼這很重要。)(對於其他人的線索,在類型聲明之後的'='是重要的。 – Malvolio