Я обнаружил, что при использовании сопоставления шаблонов с альтернативами (для строк) 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")
^
EDIT :
Так что это действительно функция, а не ошибка ... Кто-нибудь может привести пример, когда это может быть полезным?
Когда я использую:
x match {
case myValue1 => println ("match")
case _ =>
}
, я получаю предупреждение о недостижимом коде
в последнем случае, подразумевая, что первый всегда совпадает.