scala-未初始化的变量声明
我的一个scala类中有一个变量,其值仅在调用特定方法时第一次设置。方法参数值将是字段的初始值。所以我有这个:scala-未初始化的变量声明,scala,Scala,我的一个scala类中有一个变量,其值仅在调用特定方法时第一次设置。方法参数值将是字段的初始值。所以我有这个: classX { private var value: Int= _ private var initialised = false def f(param: Int) { if (!initialised){ value = param initialised = true } } } 有没有一种更像scala的方法可以做到
classX {
private var value: Int= _
private var initialised = false
def f(param: Int) {
if (!initialised){
value = param
initialised = true
}
}
}
有没有一种更像scala的方法可以做到这一点?选项似乎有点太麻烦了…实际上使用
选项
不那么麻烦,因为值
是否已初始化的问题可以从选项
中的部分
或无
的值推断出来。这是比使用标志更惯用的Scala
class X() {
var value: Option[Int] = None
def f(param: Int) {
value match{
case None => value = Some(param)
case Some(s) => println("Value already initialized with: " + s)
}
}
}
scala> val x = new X
x: X = X@6185167b
scala> x.f(0)
scala> x.value
res1: Option[Int] = Some(0)
scala> x.f(0)
Value already initialized with: 0
f()方法的用途是什么?是否多次调用,但在第一次调用后被忽略?如果在第一次调用f()之前访问了“value”,会发生什么?您所做的基本上是自我管理选项的弱实现。您不喜欢它们的哪些方面?请注意,您的类根本不是线程安全的!如果您需要VAR,您可能需要重新考虑您的设计。你能解释一下你为什么有这个要求吗?+1了解
选项。这是惯用语,可以让你远离麻烦。另外,我知道你说 Value是稍后设置的,但是强烈地考虑在类的构造函数中设置<代码>值>代码,这是使类不可变的一个重要步骤。