如何将参数传递给惰性val

时间:2014-09-03 10:03:36

标签: scala

我有一个场景,我想在访问延迟值时传递参数。下面的例子应该解释这个问题。有人可以推荐最好的方法吗?

由于 DES

class A(test: Boolean) {

}

object A {

  lazy val a = new A(???)

  def apply(test: Boolean) = a(test)
}

当然可以使用var和Option来实现,但想知道是否有更好的方法:

class A(test: Boolean) {

}

object A {

  var a: Option[A] = None

  def apply(test: Boolean) = a match {
    case Some(sa) => sa
    case None => 
      a = Some(new A(test))
      a.get
    }
}

2 个答案:

答案 0 :(得分:1)

您可以将类型传递给a

class A(test: Boolean) { }

object A {

  lazy val a: A.type = A

  def apply(test: Boolean): A = a(test)
}

虽然我没有看到诚实的观点。

答案 1 :(得分:1)

伴侣object是一个单身人士,因此使用外部参数初始化其常量值(vallazy val)并不合理。

如果您需要为每个实例使用不同的值,请将lazy val移动到该类

class A(test: Boolean) {
    lazy val a = test
}

否则只需使用def

object A {
    def a(test: Boolean) = new A(test)
    def apply(test: Boolean) = a(test)
}