首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala: PartialFunction怪异的行为

Scala: PartialFunction怪异的行为
EN

Stack Overflow用户
提问于 2015-12-16 12:21:38
回答 1查看 61关注 0票数 1

这很奇怪,但我的代码打印u。你知道它为什么会做这种事吗?

代码语言:javascript
复制
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))    
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-16 12:28:25

您的代码将字符串"“解释为PartialFunction

代码语言:javascript
复制
val result: PartialFunction[Int, String] = "<undef>"
result.apply(1) // second character of "<undef>" --> u

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

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

你想要的是applyOrElse

代码语言:javascript
复制
val fun = f1 orElse f2 orElse f3
fun.applyOrElse(1, "<undef>") // --> "<undef>"

或者,您可以指定回退部分函数:

代码语言:javascript
复制
val result = f1 orElse f2 orElse f3 orElse {
  case _ => "<undef>"
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34311923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档