我有一个场景,我想在访问延迟值时传递参数。下面的例子应该解释这个问题。有人可以推荐最好的方法吗?
由于 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
}
}
答案 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
是一个单身人士,因此使用外部参数初始化其常量值(val
和lazy 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)
}