值类w /`val`字段

时间:2015-04-19 15:43:04

标签: scala

阅读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实际意味着什么。

1 个答案:

答案 0 :(得分:3)

或许措辞必须是val 有点偏。更具体地说,值类参数必须是公共val ,如该文章中所述。

  

价值等级......

     

...必须只有一个主要构造函数,其中一个public,val参数,其类型不是值类。

声明class RichInt(val self: Int) extends AnyVal,意味着编译器将为类self创建RichInt的公共访问器。如果从构造函数中删除val声明,那么self将在类的实例中是私有的(并且只能由this实例访问)。