繁体   English   中英

Scala:PartialFunction怪异行为

[英]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

这是通过从StringWrappedString的隐式转换而发生的, WrappedStringSeq[Char]的子类型。 此外, Seq[T]PartialFunction[Int, T]的子类型(给定索引,如果存在Seq ,则获取Seq的元素)。

最后一行到达这种情况,因为1不能被2,3,5中的任何一个整除(因此它落入f1f2f3 )。

相反,您想要的是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM