Scala中的方法中“param:=> TYPE”的含义是什么?

时间:2018-05-08 06:54:55

标签: scala

我最近使用以下方法偶然发现了一个抽象类:

abstract class Boolean {
    def && (x: => Boolean): Boolean = etc...
}

我想知道x: => Boolean的含义是什么?这是否意味着x可以是任何类型,它确实产生一个布尔值?或者说x是抽象类的类型?

感谢

2 个答案:

答案 0 :(得分:2)

https://docs.scala-lang.org/tour/by-name-parameters.html

  

仅在使用时评估名称参数。他们形成鲜明对比   按值参数。

     

按名称参数的优点是,如果不对它们进行评估   它们不在函数体中使用。另一方面,按价值计算   参数的优点是它们只被评估一次。

答案 1 :(得分:2)

x是一个名称参数,这意味着只有在方法中引用它时才会对其进行求值。在这种情况下,它被用于产生&&方法的短路行为:

def foo(): Boolean = {
  println("In foo")
  true
}

true && foo()

如果你在REPL中运行它,你永远不会看到打印“In foo”,因为&&不需要foo的结果。

您可以将by-name参数视为与零参数函数类似,但更轻量级,并且语法略有不同:

def bar(x: () => Int): Unit // bar takes a function returning an Int
def baz(x: => Int): Unit // baz takes an Int as a by-name parameter