任何人都可以向我解释以下代码中的问题。我以为我在这里做的是
- 全局变量
a=5
的声明 - 函数
fun
的定义,该函数采用一个参数,该参数默认为上述全局变量a
,当我致电fun()
没有任何参数时,本地变量a
成为全局变量a
的副本,并且在功能代码中的任何点上,它优先于全局a
(除非我特别使用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?
,当我致电
的副本fun()
没有任何参数时,本地变量a成为全局变量a
否:在函数范围内评估默认参数。您的代码类似于以下代码:
fun = function(a) {
if (missing(a)) a = a
a + 1
}
这使范围更清晰,并解释了为什么您的代码不起作用。
请注意,这是仅 true true thue默认参数;明确通过的参数(当然)在呼叫者的范围中进行了评估。