Допустимые символы идентификаторов в Scala

Одна вещь, которую я нахожу довольно запутанной, - это знание того, какие символы и комбинации я могу использовать в именах методов и переменных. Например

val #^ = 1 // legal
val #  = 1 // illegal
val +  = 1 // legal
val &+ = 1 // legal
val &2 = 1 // illegal
val £2 = 1 // legal
val ¬  = 1 // legal

Как я понимаю, существует различие между буквенно-цифровыми идентификаторами и операторными идентификаторами. Вы можете смешивать и сопоставлять один или другой, но не оба, если они не разделены знаком подчеркивания (смешанный идентификатор).

Из Программирование на языке Scala, раздел 6.10,

Идентификатор оператора состоит из одного или нескольких символов оператора. Операторные символы - это печатаемые символы ASCII, такие как +, :, ?, ~ или #.

Более точно, операторный символ принадлежит к набору Unicode математических символов (Sm) или других символов (So), или к 7-битным ASCII символам, которые не являются буквами, цифрами, круглыми скобками, квадратными скобки, фигурные скобки, одинарная или двойная кавычка или знак подчеркивания, точка, точка с запятой, запятая или символ обратной галочки.

Таким образом, мы не можем использовать ()[]{}''_.;, и `

Я искал математические символы Unicode в Wikipedia, но те, которые я нашел, не включают +, :, ? и т.д. Есть ли где-нибудь окончательный список символов операторов?

Также есть идеи, почему математические операторы Unicode (а не символы) не считаются операторами?

48
задан Luigi a.k.a. Rhys 5 October 2011 в 05:11
поделиться