在Scala中默认公开实例变量的理念是什么?

Pra*_*one 6 scala

在Scala中默认使实例变量公开的原理是什么.默认情况下不应该将它们设为私有,这会使开发人员减少错误并鼓励构图?

par*_*tic 11

首先,你应该知道当你写:

class Person( val name: String, val age: Int ) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

name并且age不是实例变量,而是访问器方法(getter),默认情况下是公共的.

如果你改写:

class Person( name: String, age: Int ) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

name并且age只是实例变量,它们是您可以期望的私有变量.

Scala的哲学是更喜欢不可变的实例变量,然后使用公共访问器方法不再是一个问题.

  • 在你的第二个例子中,`name`和`age`也可以只是构造函数参数而不是实例变量,这取决于它们在`Person`体中的使用方式. (3认同)

Ric*_*son 5

私人鼓励巨石.一旦将不相关的功能放入类中更容易,因为它需要读取一些恰好是私有的变量,类就会开始增长.

这只是一个错误的默认值,也是Java中超过1000行的类的一个重要原因.

Scala默认为不可变,这消除了人们经常使用私有来限制(但不删除,因为类自己的方法仍然可以改变变量)的大量错误类.