我有一个带有getter/setter的类:
class Person {
private var _age = 0
//getter
def age = _age
//setter
def age_=(value: Int): Unit = _age = value
}
我们知道我们可以像这样调用 setter 方法:
val p = new Person()
p.age= (2)
p age= 11
p.age= 8-4
在这种情况下,令人感兴趣的是:def age_=
中的下划线(_
)可以在调用方法时删除。
我的问题是在这种情况下下划线的用途是什么?
有人告诉我,它用于分隔标识符中的非字母数字字符。所以我试了这个:
var x_= = 20
x_= = 10
x= = 5 // I got error here
为什么在这种情况下我不能删除下划线?
另外,如果我尝试多次使用下划线:
val x_=_x = 1
我也遇到了编译错误。
是否有关于下划线用法的规则,此下划线用法的术语是什么?
编译错误说明了一切,真的:
scala> var x_= = 20
<console>:10: error: Names of vals or vars may not end in `_='
只允许方法的名称以 _=
结尾。这是有道理的,因为允许将 val 命名为 x_=
真的很令人困惑
但是,下划线确实用于将字母数字字符与特殊字符分开。只是在 val 或 var 的情况下,你不能用 =
来结束它
scala> var x_# = 20
x_#: Int = 20
scala> x_# = 10
x_$hash: Int = 10
我认为在特殊字符之前的第一个下划线之后不允许使用另一个下划线。
val x_y_^ = 1 // Ok
val x_^_^ = 1 // Not ok
基于 Scala 语言规范:
首先,标识符可以以字母开头,字母后跟任意字母和数字序列。后面可以跟下划线 '' 字符和另一个由字母和数字或运算符字符组成的字符串。
有关有效标识符的示例,另请参阅链接规范中的示例 1.1.1。