【发布时间】:2011-05-27 15:22:05
【问题描述】:
我发现当使用模式匹配和替代(字符串)时,Scala 接受以大写开头的变量(在下面的示例中,MyValue1 和 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")
^
编辑:
所以它确实是一个特性而不是一个错误......谁能提供一个例子,这可能有用吗?
当我使用时:
x match {
case myValue1 => println ("match")
case _ =>
}
我在最后一种情况下收到unreachable code 警告,暗示第一种情况总是匹配的。
【问题讨论】:
-
这是 Scala 中常见的编程错误之一:stackoverflow.com/questions/1332574/…。我强烈建议阅读整个线程 - 它还有很多其他类似的问题。
-
感谢您的精彩参考。
-
一个有用的例子:
x match { case myValue1:String => println("match: "+myValue1) ; case _ => }--> myValue1 变成一个局部变量。 -
“伟大的线程”-> 课程 SO 出于“适度的原因”将其删除。 +1 迂腐,-1 实用性。