阅读Value Classes and Universal Traits帖子,我查看了RichInt
示例。
但是,我更改了self
字段以取消val
。
scala> class RichInt(self: Int) extends AnyVal {
| def toHexString: String = java.lang.Integer.toHexString(self)
| }
<console>:7: error: value class parameter must be a val and not be private[this]
class RichInt(self: Int) extends AnyVal {
^
我遇到了编译时错误。看来,在字段中省略val
结果可以访问private[this]
。
保持与排除val
的重要性是什么?我不确定must be a val
实际意味着什么。
答案 0 :(得分:3)
或许措辞必须是val 有点偏。更具体地说,值类参数必须是公共val ,如该文章中所述。
价值等级......
...必须只有一个主要构造函数,其中一个public,val参数,其类型不是值类。
声明class RichInt(val self: Int) extends AnyVal
,意味着编译器将为类self
创建RichInt
的公共访问器。如果从构造函数中删除val
声明,那么self
将在类的实例中是私有的(并且只能由this
实例访问)。