为什么这不能编译:
scala> val a? = true
<console>:1: error: illegal start of simple pattern
val a? = true
^
Run Code Online (Sandbox Code Playgroud)
这有效吗?
scala> val a_? = true
a_?: Boolean = true
Run Code Online (Sandbox Code Playgroud)
根据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
Run Code Online (Sandbox Code Playgroud)
希望这能回答你的问题.