具有以下功能:
def fMatch(s: String) = {
s match {
case "a" => println("It was a")
case _ => println("It was something else")
}
}
这种模式很好地匹配:
scala> fMatch("a")
It was a
scala> fMatch("b")
It was something else
我想做的事情如下:
def mMatch(s: String) = {
val target: String = "a"
s match {
case target => println("It was" + target)
case _ => println("It was something else")
}
}
这会产生以下错误:
fMatch: (s: String)Unit
<console>:12: error: unreachable code
case _ => println("It was something else")
我猜这是因为它认为目标实际上是您想要分配给任何输入的名称。两个问题:
为什么这样的行为?难道不能仅在范围内查找具有适当类型的现有变量并首先使用它们,如果找不到,然后将target视为模式匹配的名称吗?
有没有解决方法?有什么方法可以对变量进行模式匹配?最终,人们可以使用一个大的if语句,但是匹配大小写更为优雅。
相关:stackoverflow.com/questions/7083502/...
—
戴维L.
我相信这个问题,代码和答案从Scala 2.12.x开始已经过时了。如果问题所在的部分提到了适用的版本,那将是很好的。
—
康尼