我是Scala的新手,已经在这里搜索过但没有找到答案。我想知道这个运算符在函数的参数上下文中是什么意思“x:=> Boolean”。
package scala
abstract class Boolean {
def && (x: => Boolean): Boolean
def || (x: => Boolean): Boolean
}
我知道def example(x: Int => Boolean): Boolean
意味着带有Int并返回Boolean的匿名函数。但是,如果省略参数意味着什么?
答案 0 :(得分:8)
它按名称传递参数。表示在访问参数时将评估表达式。
答案 1 :(得分:6)
它实际上是零参数函数调用的语法糖:
x: () => Boolean
因此,在调用函数之前不会对x进行求值,因此我们会对参数进行惰性求值。
每次在方法体中引用x时,都会重新评估。如果您不希望发生这种情况,可以执行以下操作:
lazy val a = x
将lazy关键字添加到decalaration可确保仅在' a'首先被引用。
答案 2 :(得分:4)
它被称为 right arrow 。它也是名字“胖箭”
右箭头=>
将函数的参数列表与其正文分开。
示例:
object TimerAnonymous {
def oncePerSecond(callback: () => Unit) {
while (true) { callback(); Thread sleep 1000 }
}
def main(args: Array[String]) {
oncePerSecond(() =>
println("time flies like an arrow..."))
}
}
右箭头=>显示此示例中存在匿名函数。它将函数的参数列表与其正文分开。在此示例中,参数列表为空,如箭头左侧的空对括号所示。函数的主体与上面的timeFlies相同。
答案 3 :(得分:0)
在这种情况下,它是懒惰的评估。您只需在需要时评估参数。有关scala惰性评估的文章数量很多,例如: http://louisbotterill.blogspot.com/2009/07/scala-lazy-evaluation-and-sieve-of.html