为什么我在Scala中重新分配函数值失败?

时间:2011-09-17 21:37:42

标签: scala

在下面的代码中,我尝试创建一个不带参数的函数值并打印消息

trait Base {
  var onTrade = () => println("nothing")

  def run {
    onTrade
  }
}

在下面的子类中,我尝试重新分配函数值以打印不同的消息

class BaseImpl extends Base {
  onTrade = () => {
    val price = 5
    println("trade price: " + price)
  }
  run
}

当我运行BaseImpl时,根本没有任何内容打印到控制台。我期待

trade price: 5

为什么我的代码会失败?

1 个答案:

答案 0 :(得分:8)

onTrade是一个函数,所以你需要使用括号来调用它:

def run {
   onTrade()
}

更新

方法run最有可能让您感到困惑 - 即使没有括号也可以调用它。方法和功能之间有区别。你可以看看这个问题,它可能会有所帮助:

What is the rule for parenthesis in Scala method invocation?