任何人都可以在下面的代码中解释我的错误。我以为我在这里做的是
a=5
fun
的定义,它接受一个默认为上述全局变量的参数a
当我在没有任何参数的情况下调用fun()
时,局部变量a
将成为全局变量a
的副本,并且在函数代码中的任何位置它都优先于全局变量a
。 {1}}(除非我专门使用get("a", envir=parent.frame)
)
但我一定是错的。为什么不允许?
> a = 5
> fun = function(a=a) { a + 1 }
> fun(4)
[1] 5
> fun()
Error in fun() :
promise already under evaluation: recursive default argument reference or earlier problems?
答案 0 :(得分:1)
当我在没有任何参数的情况下调用
fun()
时,局部变量a将成为全局变量a
的副本
否:在函数范围内计算默认参数。您的代码类似于以下代码:
fun = function(a) {
if (missing(a)) a = a
a + 1
}
这使得范围更加清晰,并解释了为什么您的代码不起作用。
请注意,对于默认参数,此仅为true;显式传递的参数(当然)在调用者的范围内进行评估。