我正在学习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
我不明白:
为什么_age
,为什么不age
,是否有任何特殊的利益或只是一个惯例来理解为私人。
_=
中的def age_=(newAge:Int) = _age = newAage
是什么
这句话在做什么。
答案 0 :(得分:10)
这是在Scala中声明getters and setters的方法。
为什么_age,为什么不是年龄,是否有任何特殊的好处或只是一个惯例来理解为私人。
因为getter声明已经使用了age
,所以你需要一个替代变量名。
_=
def age_=(newAge: Int) = _age = newAge
这句话的内容是什么。
这是一个提示编译器这是一个setter方法的提示。在外部,年龄将作为财产暴露,您可以这样称呼:
val p = new Person(1, "a", "b", 10)
p.age = 42
println(p.age)
您没有明确调用age_=
,但仍会调用setter方法。 getter也一样。