我发现当使用模式匹配与替代项(对于字符串)时,Scala 接受以大写字母开头的变量(在下面的示例中,MyValue1
and MyValue2
),但不是以小写字母 (myValue1
, myValue2
)。这是 Scala 的错误还是功能?我在 2.8 版本中得到了这个。如果这是一个功能,任何人都可以解释其背后的基本原理吗?这是我使用的代码:
val myValue1 = "hello"
val myValue2 = "world"
val MyValue1 = "hello"
val MyValue2 = "world"
var x:String = "test"
x match {
case MyValue1 | MyValue2 => println ("first match")
case myValue1 | myValue2 => println ("second match")
}
运行时,我得到以下信息:
scala> val myValue1 = "hello"
myValue1: java.lang.String = hello
scala> val myValue2 = "world"
myValue2: java.lang.String = world
scala> val MyValue1 = "hello"
MyValue1: java.lang.String = hello
scala> val MyValue2 = "world"
MyValue2: java.lang.String = world
scala> var x:String = "test"
x: String = test
scala> x match {
| case MyValue1 | MyValue2 => println ("first match")
| case myValue1 | myValue2 => println ("second match")
| }
<console>:11: error: illegal variable in pattern alternative
case myValue1 | myValue2 => println ("second match")
^
<console>:11: error: illegal variable in pattern alternative
case myValue1 | myValue2 => println ("second match")
^
EDIT:
所以这确实是一个功能而不是一个错误......任何人都可以提供一个示例,当这可能有用时?
当我使用时:
x match {
case myValue1 => println ("match")
case _ =>
}
我得到一个unreachable code
对最后一个案例发出警告,暗示第一个案例始终匹配。
这并不是特定于具有替代方案的模式,并且它不是一个错误。模式中以小写字母开头的标识符表示如果模式匹配则将绑定的新变量。
所以,你的例子相当于写:
x match {
case MyValue1 | MyValue2 => println ("first match")
case y | z => println ("second match")
}
您可以通过使用反引号来解决此问题:
x match {
case MyValue1 | MyValue2 => println ("first match")
case `myValue1` | `myValue2` => println ("second match")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)