Я обнаружил, что при использовании сопоставления шаблонов с альтернативами (для строк) 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
в последнем случае, подразумевая, что первое всегда совпадает.