为什么你假设你只想要全局变量?全局值和方法非常有用。这是您将object
在 Scala 中使用的大部分内容。
object NumericConstant {
val Pi = 3.1415926535897932385 // I probably will not change....
}
object NumericFunctions {
def squared(x: Double) = x*x // This is probably always what we mean...
}
现在,您必须小心使用全局变量,如果您愿意,可以在对象中实现它们。然后你需要弄清楚你是否粗心(注意:将一个类的相同实例传递给程序中的每个类和方法同样有问题),或者你正在做的事情的逻辑是否最好通过单一的全局值。
这是一个非常非常糟糕的主意:
object UserCache {
var newPasswordField: String = "foo bar"
}
两个用户同时更改他们的密码,然后……嗯……你会有一些不满意的用户。
另一方面,
object UserIDProvider {
private[this] var maxID = 1
def getNewID() = this.synchronized {
var id = maxID
maxID += 1
id
}
}
如果你不做这样的事情,同样,你会有一些不满意的用户。(当然,您确实需要在启动时读取磁盘上有关用户 ID 号的一些状态……或者将所有这些内容保存在数据库中……但您明白了。)