Scala方法和值名称

Rog*_*ach 6 scala

为什么这不能编译:

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)

S.R*_*R.I 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
Run Code Online (Sandbox Code Playgroud)

希望这能回答你的问题.