[英]Scala: PartialFunction weird behavior
很奇怪,但是我的代码显示了u
。 有什么想法为什么要这样做吗?
object PF extends App {
val f1: PartialFunction[Int, String] = {
case x: Int if x % 2 == 0 => "2"
}
val f2: PartialFunction[Int, String] = {
case x: Int if x % 3 == 0 => "3"
}
val f3: PartialFunction[Int, String] = {
case x: Int if x % 5 == 0 => "5"
}
val result = f1.orElse(f2.orElse(f3.orElse("<undef>")))
println(result.apply(1))
}
您的代码将字符串“”解释为PartialFunction
:
val result: PartialFunction[Int, String] = "<undef>"
result.apply(1) // second character of "<undef>" --> u
这是通过从String
到WrappedString
的隐式转换而发生的, WrappedString
是Seq[Char]
的子类型。 此外, Seq[T]
是PartialFunction[Int, T]
的子类型(给定索引,如果存在Seq
,则获取Seq
的元素)。
最后一行到达这种情况,因为1不能被2,3,5中的任何一个整除(因此它落入f1
, f2
和f3
)。
相反,您想要的是applyOrElse
:
val fun = f1 orElse f2 orElse f3
fun.applyOrElse(1, "<undef>") // --> "<undef>"
另外,您可以指定一个后备部分函数:
val result = f1 orElse f2 orElse f3 orElse {
case _ => "<undef>"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.