以下是两个部分功能,预计执行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