Подтвердить что ты не робот

Как разоблачить аргументы конструктора Scala как публичные члены?

Посмотрите на этот пример:

class Point(x: Double, y: Double){
  override def toString = "x: " + x + ", y: " + y
  def +(sourcePoint: Point) : Point = {
    return new Point(x + sourcePoint.x, y + sourcePoint.y
  }
}

Как вы можете видеть, я хочу определить оператор оператора + для класса Point. Но это не сработает потому что в этом методе x и y не могут быть доступны в локальной переменной sourcePoint, поскольку они являются частными, поэтому я изменил этот пример следующим образом:

class Point(_x: Double, _y: Double){
  var x = _x
  var y = _y

  override def toString = "x: " + x + ", y: " + y
  def +(sourcePoint: Point) : Point = {
    return new Point(x + sourcePoint.x, y + sourcePoint.y)
  }
}

Очевидно, что это работает, однако есть более простой способ определить эти переменные вместо перехода от _x → x и _y → y.

Спасибо за помощь и время!:)

4b9b3361

Ответ 1

Да, есть:

class Point(val x: Int, val y: Int)

Ответ 2

используя val, но затем параметр становится окончательным (постоянным). Если вы хотите переназначить значение, вы должны использовать var. Итак,

class Point(var x: Int, var y: Int)