我正在尝试做类似的事情:
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中没有可能...任何建议?
答案 0 :(得分:7)
由于两个原因,这不起作用。首先,
case isOne => ...
不你认为它是什么。 isOne
中的match
只是一个热切匹配任何内容的符号,而不是对val isOne
的引用。您可以使用反引号来解决此问题。
case `isOne` => ...
但是这仍然不会做你认为它做的事情。 x
是Int
,isOne
是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 => ....
可以很好地完成工作。