[Scala学习笔记] By-name Parameters

Scala By-name Parameters

原文:BY-NAME PARAMETERS in TOUR OF SCALA

By-name parameters只有被使用时才会被求值,且每次引用时都会求值。

可以理解为把by-name parameters替换为对应的表达式,它的特点与by-value parameters恰好相反。

使用=>定义by-name parameter:

def calculate(input: => Int) = input * 37
  • 优点:如果函数体中没有用到这个参数,就不必对其求值。这种延迟参数计算时机的特点在参数计算需要大量时间时有助于程序的performance。
  • 缺点:每次使用到都需要重新求值。

例:实现一个while循环。

def whileLoop(condition: => Boolean)(body: => Unit): Unit =
	if (condition) {
        body
        whileLoop(condition)(body)
    }

var i = 2

whileLoop (i > 0) {
    println(i)
    i -= 1
} // prints 2 1

whileLoop方法使用两个参数列表分别获取条件和循环体。

condition = true,则body将会被执行,接着递归调用whileLoop

condition = false,则body将不会被求值,因为我们使用了=>指定body为By-name parameter。

猜你喜欢

转载自www.cnblogs.com/zyk1999/p/Scala-By-name-Parameters.html