如何将Scala构造函数参数公开为公共成员?

时间:2012-03-25 21:11:43

标签: 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类上定义+运算符方法。但这不起作用 因为在该方法中,xy无法在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 - >年。

感谢您的帮助和时间! :)

2 个答案:

答案 0 :(得分:64)

是的,有:

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

答案 1 :(得分:5)

使用val有效,但参数变为final(常量)。 如果您希望能够重新分配值,则应使用var。所以

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