scala中的'_ ='是什么?

Sun*_*Sun 5 scala

我正在学习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
Run Code Online (Sandbox Code Playgroud)

我不明白:

  1. 为什么_age,为什么不age,有什么特别的好处或只是一个惯例来理解为私人.

  2. 是什么_=def age_=(newAge:Int) = _age = newAage 什么这一说法做.

Yuv*_*kov 10

这是在Scala中声明getter和setter的方法.

为什么_age,为什么不是年龄,是否有任何特殊的好处或只是一个公约来理解为私人.

因为agegetter声明已经采用了,所以你需要一个替代的变量名.

是什么_=def age_=(newAge: Int) = _age = newAge什么这一说法做.

这是编译器的一个暗示,这是一个setter方法.在外部,年龄将作为一个属性公开,您可以这样调用:

val p = new Person(1, "a", "b", 10)
p.age = 42
println(p.age)
Run Code Online (Sandbox Code Playgroud)

您没有显式调用age_=,但仍会调用setter方法.对于getter来说同样如此.