繁体   English   中英

Scala中的“ =>”运算符

[英]“=>” 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM