6

我的一个 scala 类中有一个变量,其值仅在调用特定方法时第一次设置。方法参数值将是该字段的初始值。所以我有这个:

classX {
  private var value: Int= _
  private var initialised = false

  def f(param: Int) {
    if (!initialised){
      value = param
      initialised = true
    }
  }
}

有没有更类似于 scala 的方式来做到这一点?选项似乎有点太麻烦了...

4

1 回答 1

14

实际上使用Option比较简单,因为可以从 中的or的value值推断出是否已经初始化的问题。这也比使用标志更惯用 Scala。SomeNoneOption

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
于 2013-05-10T18:47:25.993 回答