在Scala中,'_='是什么?

5

我正在学习Scala,但是我很难理解它。我在教程中得到了一些Scala代码,但是有几个问题我无法理解。

以下是代码:

class Person(val id:Int, 
             var firstName:String, 
             var lastName:String, 
             private var _age:Int) {
  // these methods are identical to what would be created by var in the constructor
  def age = _age
  def age_=(newAge:Int) = _age = newAage
}

val me = new Person(45,"Dave","Copeland",35)
me.firstName = "David"
me.age = 36

我不明白:

  1. 为什么要用 _age,而不是 age,这样做有什么特殊的好处还是只是一种理解为私有的惯例。

  2. def age_=(newAge:Int) = _age = newAage 中的 _= 是什么意思,这个语句在做什么。


3
http://dustinmartin.net/getters-and-setters-in-scala/ - Łukasz
1个回答

12
这是在Scala中声明getters and setters的方式。

为什么是 _age,而不是 age,有什么特殊的好处或只是一种理解为私有的惯例?

因为 age 已被getter声明占用,所以您需要一个替代变量名。

def age_=(newAge: Int) = _age = newAge 中的 _= 是什么意思?这个语句在做什么。

它是向编译器提示这是一个setter方法。在外部,age将被公开为一个属性,您可以像这样调用它:
val p = new Person(1, "a", "b", 10)
p.age = 42
println(p.age)

你不需要直接调用age_=,但是设置方法仍然会被调用。获取器也是一样的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接