看看下面的功能:爲什麼Scala中的模式匹配不適用於變量?
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")
我想這是因爲它認爲目標實際上是您想要分配給任何輸入的名稱。兩個問題:
爲什麼會這樣?不能僅僅查找範圍中具有適當類型的現有變量並首先使用它們,如果沒有找到,然後將目標作爲模式匹配的名稱來處理?
有沒有解決方法?任何模式匹配變量的方式?最終可以使用大的if語句,但是匹配大小更優雅。
相關:http://stackoverflow.com/questions/7083502/why-cant-a-variable-be-a-stable-identifier –
我相信這個問題,代碼和答案是過時的斯卡拉2.12.x.如果適用的版本被作爲問題的一部分提及,那將會很好。 – conny