我是Scala的新手,已经在这里搜索但没有找到答案.我想知道这个运算符在函数的参数上下文中是什么意思"x:=> Boolean".
package scala
abstract class Boolean {
def && (x: => Boolean): Boolean
def || (x: => Boolean): Boolean
}
Run Code Online (Sandbox Code Playgroud)
我知道这def example(x: Int => Boolean): Boolean
意味着匿名函数接受Int并返回Boolean.但是,如果省略参数意味着什么呢?
它实际上是零参数函数调用的语法糖:
x: () => Boolean
Run Code Online (Sandbox Code Playgroud)
因此,在调用函数之前不会对x进行求值,因此我们会对参数进行惰性求值.
每次在方法体中引用x时,都会重新评估.如果您不希望这种情况发生,您可以执行以下操作:
lazy val a = x
Run Code Online (Sandbox Code Playgroud)
将lazy关键字添加到decalaration可确保仅在首次引用"a"时评估x.
它称为右箭头。它也以“胖箭头”的名字而流行
右箭头=>
将函数的参数列表与其主体分开。
例:
object TimerAnonymous {
def oncePerSecond(callback: () => Unit) {
while (true) { callback(); Thread sleep 1000 }
}
def main(args: Array[String]) {
oncePerSecond(() =>
println("time flies like an arrow..."))
}
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,右箭头=>表示存在匿名函数,该函数将函数的参数列表与其主体分开。在此示例中,参数列表为空,如箭头左侧的空括号对所示。该函数的主体与上面的timeFlies之一相同。
归档时间: |
|
查看次数: |
8497 次 |
最近记录: |