Странность синтаксиса Scala с: и требует нижнего регистра
это должно произойти?
scala> val myList = List(42)
myList: List[Int] = List(42)
scala> val s2 :: Nil = myList
s2: Int = 42
scala> val S2 :: Nil = myList
<console>:8: error: not found: value S2
val S2 :: Nil = myList
^
он, по-видимому, чувствителен к регистру. Ошибка или "особенность"?
2 ответов
он чувствителен к регистру. В шаблоне соответствия идентификатор, начинающийся с заглавной буквы (или цитируемый backticks), рассматривается как ссылка на определенное значение, а не как новая привязка.
Это застает многих людей врасплох, и это не совсем очевидно из чтения спецификации языка Scala. Наиболее релевантными битами являются"переменной шаблоны" ...
переменная pattern x - простой идентификатор, который запускается с прописной буквой. Он соответствует любому значению и связывает имя переменной с этим значением.
... и "стабильные шаблоны идентификаторов":
чтобы разрешить синтаксическое перекрытие с переменным шаблоном, шаблон стабильного идентификатора может быть не простым именем, начинающимся с строчной буквы.
вопросы:
характеристика :)
::
является формой сопоставления шаблонов. В Scala переменные, начинающиеся с нижнего регистра, используются для переменных, которые должны быть связаны совпадением. Переменные, начинающиеся с верхнего регистра (или заключенные в backticks), используются для существующей переменные, которые используются как часть схемы, чтобы соответствовать.