" = GT;" Scala中的运算符

时间:2014-07-14 09:09:13

标签: scala

我是Scala的新手,已经在这里搜索过但没有找到答案。我想知道这个运算符在函数的参数上下文中是什么意思“x:=> Boolean”。

package scala
abstract class Boolean {
def && (x: => Boolean): Boolean 
def || (x: => Boolean): Boolean
}

我知道def example(x: Int => Boolean): Boolean意味着带有Int并返回Boolean的匿名函数。但是,如果省略参数意味着什么?

4 个答案:

答案 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