4

我正在尝试将 R 的词法范围与 2 级函数一起使用,但 R 3.0.2 中的行为似乎不正确。

foo = function() print(ii)
eye_foo = function( ) { 
    ii = 1  # (A)
    foo()
}
eye_foo()   # (B)
ii=2        # (C)
eye_foo()   # (D)

我希望(B)会打印“1”,绑定到(A)处定义的变量。相反 (B) 给出错误消息“打印错误(ii):未找到对象 'ii'”。但是,在全局范围内的 (C) 处定义 ii 后,(D) 打印“2”而忽略过程中的 (A)。

为什么(A)被忽略?

4

1 回答 1

2

foo是在全球环境中定义的。在第一次调用时,在创建 foo 的环境中找不到eye_foo任何值。ii然后你做了一个值被找到并得到了预期的结果。就那么简单。

> environment(foo)
<environment: R_GlobalEnv>

 ?'function'
 ?globalenv

通常人们通过将参数传递给函数来避免这个难题。

于 2013-11-09T01:12:38.017 回答