Scala setter和getter

Scala setter和getter,scala,scala-repl,Scala,Scala Repl,考虑到“人”这一特征和“人”这一类: trait Person { def name: String def surname: String def married: Boolean def married_=(state: Boolean): Unit override def toString(): String = name + " " + surname + " " + married } class PersonImpl(override val name:

考虑到“人”这一特征和“人”这一类:

trait Person {

  def name: String
  def surname: String
  def married: Boolean
  def married_=(state: Boolean): Unit

  override def toString(): String = name + " " + surname + " " + married
}

class PersonImpl(override val name: String,
                  override val surname: String,
                  override var married: Boolean) extends Person
我使用REPL(从命令行开始scala,只需打开一个终端并键入scala)创建trait和类。我有以下信息: -定义特征人 -定义类PersonImpl

然后,仍然从命令行键入:

  • val p:Person=新的PersonImpl1(“马里奥”,“罗西”,假)
  • println(p)
  • p、 已婚=真的
  • 首席(p)
我可以清楚地看到,我的人已经被创造出来了,var字段已经从false变为true。好的。 现在我用另一个类和另一个特征重复同样的过程:

trait Element {

  def x: Int
  def y: Int
  def width: Int
  def height: Int

  def x_:(i:Int):Unit
  def y_:(i:Int):Unit

  override def toString(): String = x + " " + y + " " + width + " " + height

}

class GameElement(override var x: Int,override var y: Int,override val width: Int,override val height: Int) extends Element
在命令行中键入类后,我立即遇到错误: “变量x不覆盖任何内容”


这怎么可能呢?

在Scala中,这不是推荐的方法-请查看用例类


但是为了回答你的问题,你应该把单位改成y的单位,我忘记了元素trait中的“=”,也就是:trait元素{def x:Int def y:Int def width:Int def height:Int def x:(i:Int):Unit def y:(i:Int):Unit override def toString():String=x+“”+y+“”+width+“”+height}您拼错了setter,将元素与您的工作示例进行比较,您应该会看到差异。