scala - 未初始化的变量声明

use*_*218 6 scala

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

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

  def f(param: Int) {
    if (!initialised){
      value = param
      initialised = true
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

是否有更像scala的方式来做到这一点?选项似乎有点太麻烦......

Bri*_*ian 15

实际上使用Option不那么麻烦,因为是否value已经初始化的问题可以从SomeNone在中的值推断Option.这比使用标志更加惯用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
Run Code Online (Sandbox Code Playgroud)

  • +1学习`选项`.这是惯用的,会让你摆脱困境.另外,我知道你说`value`是稍后设置的,但强烈考虑在类的构造函数中设置`value`,这是使类不可变的重要一步. (5认同)