在Scala中使用延迟评估时如何摆脱虚拟变量?

car*_*_lm 0 refactoring scala lazy-evaluation dummy-data

我在斯卡拉一个新手,并与懒惰的评价玩弄和这个问题跌跌撞撞:如果我想使懒惰的评估VALÇ作品,我写的虚拟变量b的声明之前Ç,这我考虑太多样板.我尝试在没有初始初始化的情况下声明ab lazy val,但编译器抱怨.如果我写的东西:lazy val c = a:Double, b:Int也不起作用.

有没有办法摆脱这些虚拟变量?我能以更优雅的方式重构此代码吗?

  var a = 0d;                                     //> a  : Double = 0.0
  var b = 0;                                      //> b  : Int = 0
  lazy val c = a / b                              //> c  : Double = <lazy>
  //some other code...
  a = math.Pi
  b = -1
  (1 to 10).foreach(x => println(f"$x, ${x * c}%.8s"))
                                                  //> 1, -3.14159
                                                  //| 2, -6.28318
Run Code Online (Sandbox Code Playgroud)

Eug*_*nev 6

我没有看到"其他一些代码",但var通常是一个糟糕的代码味道我scala.为什么不做这样的事情

lazy val c = {
  val a = ...
  val b = ...
  ...computation with a & b ...
}
Run Code Online (Sandbox Code Playgroud)