Сопоставление шаблонов Scala с именем переменной в нижнем регистре

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

, я получаю предупреждение о недостижимом коде в последнем случае, подразумевая, что первый всегда совпадает.

14
задан Jus12 18 December 2010 в 20:25
поделиться