[英]“=>” operator in Scala
我是Scala的新手,已经在这里搜索了,但没有找到答案。 我想知道此运算符在函数的参数上下文中的含义是“ x:=> Boolean”。
package scala
abstract class Boolean {
def && (x: => Boolean): Boolean
def || (x: => Boolean): Boolean
}
我知道def example(x: Int => Boolean): Boolean
意味着采用Int并返回布尔值的匿名函数。 但是,如果省略参数意味着什么呢?
它通过名称传递参数。 表示在访问参数时将对表达式求值。
对于零参数函数调用,它实际上是语法糖:
x: () => Boolean
由于x直到函数被调用才进行求值,因此我们对参数进行了惰性求值。
每次在方法主体中引用x时,都会对其进行重新评估。 如果您不希望发生这种情况,可以执行以下操作:
lazy val a = x
在声明中添加lazy关键字可确保仅在首次引用'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..."))
}
}
在此示例中,通过右箭头=>揭示了匿名函数的存在, 它将功能的参数列表与其主体分开。 在此示例中,参数列表为空,如箭头左侧的空括号对所示。 该函数的主体与上面的timeFlies之一相同。
在这种情况下,这是懒惰的评估。 仅在需要时评估参数。 在scala惰性评估中可以找到大量文章,例如http://louisbotterill.blogspot.com/2009/07/scala-lazy-evaluation-and-sieve-of.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.