2014-09-03 72 views
0

我有一个场景,我想在传递参数时访问一个懒惰值。下面的例子应该解释这个问题。有人可以推荐最好的方法来实现这一目标吗?如何将参数传递给一个懒惰的值

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 
    } 
} 
+1

不知道你在问什么。 – 2014-09-03 10:29:43

回答

1

你可以通过类型a

感谢 德

class A(test: Boolean) { 

} 

object A { 

    lazy val a = new A(???) 

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

当然可以用VAR和选择,但不知道是否有更好的方法来实现

class A(test: Boolean) { } 

object A { 

    lazy val a: A.type = A 

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

虽然我没有看到要点吨。

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) 
} 
+0

我可能没有很好地解释上下文。我想要一个单例实例A.但实例需要一个初始化参数,不应在启动时创建。这就是为什么我懒惰地通过对象创建实例。有更好的方法吗? – user79074 2014-09-03 11:23:32

+2

带参数的单身人士不是单身人士。你确定你首先需要一个单身人士吗? – 2014-09-03 11:33:19

+0

@ user7907这可能是相关的吗? http://stackoverflow.com/questions/25168908/use-nullable-instead-of-option/25169407#25169407 – 2014-09-03 11:44:16