_传名参数_只有在使用时才会被计算。相对地是_传值(by-value)参数_。要使得参数可以通过传名来调用,只需要在它的类型前加上=>
。
1 | def calculate(input: => Int) = input * 37 |
传名参数的优点在于如果它们没有在函数体中使用,就不会被计算。另一方面,传值参数的优点在于它们仅会被计算一次。
1 | def whileLoop(condition: => Boolean)(body: => Unit): Unit = |
方法whileLoop
使用多参数列表来接受一个条件和一个循环体。如果condition
为真,则body
被执行然后递归调用whileLoop。如果condition
为假,body
将永远不会被计算,因为我们在body
类型的前面加了=>
。
现在我们传入i > 0
作为我们的condition
和println(i); i-= 1
作为body
,它的表现类似于许多语言中的标准while循环。
这种使得参数延迟到使用时才被计算的能力,在当参数是计算密集型的或者是一段比较耗时的代码块(比如抓取一个URL)的时候,可以帮助我们提高性能。