<- function(x, y, z) {
dis sqrt(x^2 + y^2)
}
dis(3, 4)
## [1] 5
参考:R for Data Science
惰性求值(Lazy Evaluation)
惰性求值是 R 的一个重要特性。指的是直到需要参数时才会进行求值。没有使用参数,那么它就一直没有实际值。
例 1
在定义函数 dis
时创建了形式参数 x, y, z
,但实际上参数 z
没有参与计算。不给 z
传入实值时并不会报错,因为函数 dis
并不需要参数 z
。
例 2
<- function(a, b) {
printout print(a)
print(b)
}
printout(100)
## [1] 100
## Error in print(b): argument "b" is missing, with no default
报错了,但还是把第一个参数打印出来了,而非从一开始就报错并且无任何输出。
你可以类比物理学中的串联电路:串联电路中电路断开会导致线路上所有的灯泡都不亮。而以上情况正好相反:电路断开处前面的灯泡依然会亮。
这是因为惰性求值的特点,仅在使用参数 b
时才会对其求值,不会影响 a
的求值。换句话说:惰性求值使得之前的求值都可以正常进行,直到运行到出错的部分。