Scala方法和值名称

时间:2011-12-25 11:56:29

标签: scala

为什么无法编译:

scala> val a? = true
<console>:1: error: illegal start of simple pattern
   val a? = true
          ^

这有用吗?

scala>  val a_? = true
a_?: Boolean = true

2 个答案:

答案 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