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

del*_*ber 2 scala

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

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

  def run {
    onTrade
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

当我运行BaseImpl时,根本没有打印到控制台.我期待着

trade price: 5
Run Code Online (Sandbox Code Playgroud)

为什么我的代码失败了?

ten*_*shi 8

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

def run {
   onTrade()
}
Run Code Online (Sandbox Code Playgroud)

更新

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

Scala方法调用中括号的规则是什么?