用于在scala中仅创建一次作用域值的习惯用法

时间:2016-07-13 14:33:53

标签: scala

假设我定义了一个在其体内声明变量的函数:

def foo = {
 val x = new X()
 x.bar
}

有没有办法可以做到这一点,无论我多少次调用函数,x都只创建一次?换句话说,我可以实现:

val x = new X()
def foo = {
  x.bar
}

但是将x的定义保留在函数的范围内?

2 个答案:

答案 0 :(得分:1)

你做不到。如果您的变量在块B内声明。在B之外不能看到此变量。

你可以做的是制作一个类或一个对象,使一个属性在定义之外可见。

object CoolObject {
  val x = new X()

  def foo = {
       // [...]
       x.bar
       // [...]
  }
}

答案 1 :(得分:0)

如果x是真正的单身人士,那么你需要把它放到一个单独的上下文中。 Scala的方法是创建一个对象。

object xHolder {
  val x = new X()
}
...
def foo = {
  import xHolder._
  x.bar
}

如果foo是具有伴随对象的类的一部分,您也可以将它放在那里。