【发布时间】:2012-01-27 14:32:26
【问题描述】:
为什么编译失败:
scala> val a? = true
<console>:1: error: illegal start of simple pattern
val a? = true
^
这行得通吗?
scala> val a_? = true
a_?: Boolean = true
【问题讨论】:
标签: scala
为什么编译失败:
scala> val a? = true
<console>:1: error: illegal start of simple pattern
val a? = true
^
这行得通吗?
scala> val a_? = true
a_?: Boolean = true
【问题讨论】:
标签: scala
根据 Scala 语言规范(看 2.8,怀疑自那以后情况发生了很大变化):
idrest ::= {字母 |数字} [`_' 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
希望这能回答您的问题。
【讨论】:
Scala 的标识符语法就是这样定义的。
? 被定义为操作符字符。并且标识符必须遵守以下规则:
它必须是一个小写字母,后跟一个“idrest”句法类别的元素,定义为“字母或数字,可能后跟_ 和一个操作字符。”
详情请见Scala Language Specification。
【讨论】: