如何避免将 var 与 BeforeAll 一起使用

How to avoid using a var with BeforeAll

提问人:Yann Moisan 提问时间:9/12/2016 更新时间:2/19/2018 访问量:501

问:

当变量的初始化发生在方法内部(即在对象实例化之后)时,有没有办法避免使用 var?beforeAll

我想支持不变性......

例如:https://github.com/holdenk/spark-testing-base/blob/master/src/main/1.3/scala/com/holdenkarau/spark/testing/SharedSparkContext.scala

斯卡拉 可变 规格2

评论

0赞 Markon 9/12/2016
看看这个:eugenezhulenev.com/blog/2014/10/18/......似乎没问题,尽管我不知道在构造函数中初始化上下文可能有什么影响

答:

0赞 Vasilisck 9/12/2016 #1

最适合您的情况是:

lazy val x: Type = _
override def beforeAll = {
  x = //you code
}

评论

0赞 Alexey Romanov 9/12/2016
没有.lazy var
0赞 Joey Baruch 2/19/2018
这不会为我编译,它仍然认为有重新分配
0赞 Noam 1/16/2017 #2

您可以使用外部伴随对象来实现这一点,scala 将确保只有其中之一:

object SparkContextProvider {
    val sparkContext: SparkContext = {
         val sc = new SparkContext(conf)
         setup(_sc)
         sc
    }
}

你的测试代码将有

trait SharedSparkContext extends SparkContextProvider {
   val sc = SparkContextProvider.sparkContext
}