模式匹配匿名

时间:2014-12-08 03:46:50

标签: 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中没有可能...任何建议?

1 个答案:

答案 0 :(得分:7)

由于两个原因,这不起作用。首先,

case isOne => ...

你认为它是什么。 isOne中的match只是一个热切匹配任何内容的符号,而不是对val isOne的引用。您可以使用反引号来解决此问题。

case `isOne` => ...

但是这仍然不会做你认为它做的事情。 xIntisOneInt => 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 => ....可以很好地完成工作。