如何在不执行变量的情况下为变量赋值?

时间:2013-12-18 06:29:49

标签: scala

我正在尝试创建一个可以分配函数的变量,但是在分配变量时执行该函数。如何在不执行变量的情况下将函数分配给变量?

object VariableMethod {
  def main(args: Array[String]) {
    (new VariableMethod).test()
  }
}

class VariableMethod {
  var method: Unit = _
  def f1() {
    println("Executing f1")
  }
  def test() {
    method = f1 // Method f1 is invoked on this line, I only want the assignment to occur on this line
    println("Is f1 executed before or after this?")
    method // I want the f1 method to be invoked only here.
  }
}

2 个答案:

答案 0 :(得分:1)

当该函数没有args且您想将其分配给valvar时,您可以使用_表示法来表示您想要部分应用它。例如:

object TestFunc{

  def f1() = {
    "foo"
  }

  val v1 = f1 _
  val v2 = f1 
  val v3 = v1()
}

在此示例中,v1的类型为() => String,v2的类型为String。对于v3,我们完全应用v1,最后得到的Stringv2相同。

答案 1 :(得分:0)

我明白了......

object VariableMethod {
  def main(args: Array[String]) {
    (new VariableMethod).test()
  }
}

class VariableMethod {
  var method: () => Unit = _
  def f1() {
    println("Executing f1")
  }
  def test() {
    method = f1
    println("Is f1 executed before or after this?")
    method()
  }
}