scala - scala中的 '_='是什么?

标签 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

我不明白:
  • 为什么_age , 为什么不 age ,是否有任何特殊的好处或只是一个约定可以理解为私有(private)。
  • 什么是_=def age_=(newAge:Int) = _age = newAage这个声明在做什么。
  • 最佳答案

    就是这样声明getters and setters在斯卡拉。

    why _age, why not age, is there any special benefit or just a convention to understand as private.



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

    what is _= in def age_=(newAge: Int) = _age = newAge what this statement doing.



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

    您没有显式调用 age_= ,但 setter 方法仍会被调用。 setter/getter 也是如此。

    关于scala - scala中的 '_='是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40058604/

    相关文章:

    scala - 使用 play 进行 akka Actor 测试

    arrays - 在scala中打印类似表格的二维数组

    postgresql - 如何用数组创建异常的解析器?

    Scala:编译时间常数

    scala - 在伴生对象的 apply 方法中使用 New 关键字

    scala - 使用Java库的Scala,利用Java 8中的lambda表达式支持

    scala - 当使用 scala 路径依赖类型作为函数 codomain 时,为什么不能为该函数添加别名?

    java - 使用spark-cassandra-connector时出错: java. lang.NoSuchMethodError

    scala - Akka-重新发送 “breaking”消息

    scala - 如何使用 play 2.4 和激活器指定配置文件