scala - 针对匿名的模式匹配

标签 scala

我正在尝试做类似的事情:

private val isOne = (x: Int) => x == 1
private val isTwo = (x: int) => x == 2

def main(x: Int): String = {
  x match {
    case isOne => "it's one!"
    case isTwo => "it's two!"
    case _ => ":( It's not one or two"
  }
}

不幸的是...看起来我的语法不正确或者这在 Scala 中是不可能的...有什么建议吗?

最佳答案

这行不通有两个原因。首先,

case isOne => ...

不是您认为的那样。 match 中的 isOne 只是一个会急切匹配任何内容的符号,而不是对 val isOne 的引用。您可以使用反引号解决此问题。

case `isOne` => ...

但这仍然不会像您认为的那样。 x 是一个 IntisOne 是一个 Int => Boolean,这意味着它们永远不会 匹配。您可以像这样修复它:

def main(x: Int): String = {
  x match {
    case x if(isOne(x)) => "it's one!"
    case x if(isTwo(x)) => "it's two!"
    case _ => ":( It's not one or two"
  }
}

但这不是很有用,case 1 => .... 可以很好地完成工作。

关于scala - 针对匿名的模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27351107/

相关文章:

scala - Slick - 更新完整对象或超过 22 列

scala - 无法执行用户定义的函数($anonfun$9 : (string) => double) on using String Indexer for multiple columns

scala - 为什么 Scala 编译器在 2.10 中对 self 类型变得更加严格?

scala - 为什么 !== 在 Scala 中的优先级低于 ===?

json - 如何将 JSON 对象(这是一个列表)解析为 Scala 中的简单 Scala 类对象?

scala - 在 IntelliJ IDEA 中导入 Scala3 SDK

list - 基于第二个属性的Scala排序列表,然后是第一个

Scala:除了空选项之外,将 None 用于其他目的

scala - 如何从 Play 中的请求中获取 InputStream

scala - 使用 Spark Scala 计算平均值