Oll*_*liP 0 scala accessor traits
我有MyObject和MyTrait:
class MyObject(private val myname: String = "") extends MyTrait {
  _name = myname
  def foo(myname : String) {
   _name = myname
  }
}
trait MyTrait {
  protected var _name: String = _
  def name = _name
}
这样可以正常工作
val myObject = new MyObject("abc")
println(myObject.name)
myObject.foo("def")
println(myObject.name)
版画
abc
def
正如所料.
现在的问题是我希望MyTrait._name是val而不是var.但我无法设法将其编译.任何提示赞赏.
此致,奥利弗
以下是使用Rex Kerr和Martin Odersky最新的尖端命名惯例的答案!
在scala辩论列表上阅读它.而且你认为他们坐在那里工作"更高级别"和计算与未装箱的整数.
样式更改有PR,但此约定必须等待一段时间.
马丁博士说: That does look promising. I have to experiment with it a little.
所以要小心这些东西; 它是实验性的,可能是化学不稳定的.
class MyObject(override protected val initialName: String = "") extends MyTrait {
  private var myName: String = initialName
  def name_=(newName: String) {
    myName = newName
  }
  override def name = myName
}
trait MyTrait {
  protected val initialName: String = "default"
  def name = initialName
}
object Test extends App {
  val myObject = new MyObject("abc")
  println(myObject.name)
  myObject.name = "def"
  println(myObject.name)
}
风格指南有一个简洁的部分,但本身并不简短.我确信有关于Daniel Sobral的"更喜欢在特质上贬低val"的答案.当遇到init-order问题时,不要忘记查阅单问题FAQ.