Scala中的"=>"运算符

Say*_*ald 7 scala

我是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.但是,如果省略参数意味着什么呢?

wed*_*ens 9

它按名称传递参数.表示在访问参数时将计算表达式.

  • 重要的是要知道,它将在每次访问时进行评估,而不是仅在第一次访问字段时发生的延迟评估. (6认同)

Jim*_*ins 6

它实际上是零参数函数调用的语法糖:

x: () => Boolean
Run Code Online (Sandbox Code Playgroud)

因此,在调用函数之前不会对x进行求值,因此我们会对参数进行惰性求值.

每次在方法体中引用x时,都会重新评估.如果您不希望这种情况发生,您可以执行以下操作:

lazy val a = x
Run Code Online (Sandbox Code Playgroud)

将lazy关键字添加到decalaration可确保仅在首次引用"a"时评估x.


Rah*_*thi 5

它称为右箭头。它也以“胖箭头”的名字而流行

右箭头=>将函数的参数列表与其主体分开。

例:

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之一相同。