我正在尝试做类似的事情:
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
是一个 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 => ....
可以很好地完成工作。
关于scala - 针对匿名的模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27351107/