我正在研究一个 coursera 示例,Signal
但无法理解这种语法,
class Signal[T](expr: => T) {
import Signal._
private var myExpr: () => T = _
private var myValue: T = _
private var observers: Set[Signal[_]] = Set()
private var observed: List[Signal[_]] = Nil
update(expr)
更新方法写为
protected def update(expr: => T): Unit = {
myExpr = () => expr
computeValue()
}
我可以理解这expr
是按名称传递的,因此仅在调用时才进行评估。但是我无法理解的是为什么myExpr
表示为() => T
?还有为什么作业写成myExpr = () => expr
. 据我了解() => expr
,表示返回的 Function0 expr
。我认为我的理解byname
是错误的。有人可以详细说明一下吗?
或者我们可以重写上面的语法如下,
class Signal[T](expr: () => T) {
import Signal._
private var myExpr: () => T = _
private var myValue: T = _
private var observers: Set[Signal[_]] = Set()
private var observed: List[Signal[_]] = Nil
update(expr)
更新方法为
protected def update(expr: () => T): Unit = {
myExpr = expr
computeValue()
}