【问题标题】:Scala method and values namesScala 方法和值名称
【发布时间】: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


【解决方案1】:

根据 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

希望这能回答您的问题。

【讨论】:

    【解决方案2】:

    Scala 的标识符语法就是这样定义的。 ? 被定义为操作符字符。并且标识符必须遵守以下规则: 它必须是一个小写字母,后跟一个“idrest”句法类别的元素,定义为“字母或数字,可能后跟_ 和一个操作字符。” 详情请见Scala Language Specification

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多