为什么无法编译:
scala> val a? = true
<console>:1: error: illegal start of simple pattern
val a? = true
^
这有用吗?
scala> val a_? = true
a_?: Boolean = true
答案 0 :(得分:6)
根据Scala语言规范(看2.8,怀疑事情发生了很大变化):
idrest :: = {letter |数字} [`_'op]
也就是说,标识符可以以字母或数字开头,后跟下划线字符,以及其他操作符。这使得foo_!@!
等标识符成为有效标识符。另请注意,标识符也可能仅包含一串操作符。考虑以下REPL会话:
Welcome to Scala version 2.9.1.final (Java HotSpot(TM) Client VM, Java 1.6.0_16).
scala> val +aff = true
<console>:1: error: illegal start of simple pattern
val +aff = true
^
scala> val ??? = true
???: Boolean = true
scala> val foo_!@! = true
foo_!@!: Boolean = true
scala> val %^@%@ = true
%^@%@: Boolean = true
scala> val ^&*!%@ = 42
^&*!%@: Int = 42
希望这能回答你的问题。
答案 1 :(得分:2)
Scala的标识符语法以这种方式定义。
?
被定义为运算符字符。标识符必须遵守以下规则:
它必须是一个小写字母,后跟一个'idrest'句法类别的元素,它被定义为'字母或数字,可能后跟_
和一个操作字符。“
有关详细信息,请参阅Scala Language Specification。