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的方法可以做到

我的一个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是稍后设置的,但是强烈地考虑在类的构造函数中设置<代码>值>代码,这是使类不可变的一个重要步骤。