我尝试了解R
中您可以通过demo(scoping)
访问的范围演示。
我不明白保存total
变量的位置。首先,根据help("<<-")
运营商&lt;&lt; - & - &gt;&gt;通常只用于函数,和 导致搜索通过父环境进行搜索 被分配的变量的定义。如果找到这样的变量 (并且它的绑定没有被锁定)然后重新定义它的值,否则 任务发生在全球环境中。
它位于global environment
。但由于我在(ls(environment))
找不到它,我猜open.account <- function(total)
为由open.account()
赋值创建的所有实例创建一个总变量。但是,如果我创建一个实例ross <- open.account(100)
,我找不到变量。
ross
...
<environment: 0x0000000011fbe998>
ls(environment(environment: 0x0000000011fbe998))
。 getAnywhere(total)
的结果是no object named ‘total’ was found
。那么在哪里生活total
的不同版本?
答案 0 :(得分:5)
ross
列表中的函数是闭包,即functions with data。 (从技术上讲,R中的大多数函数都是闭包。但通常你不关心它。)
所有这些闭包都是在对open.account
的调用中定义的,因此它们与相同的环境相关联,“在使用闭包时提供评估框的外壳”(参见help("closure")
)。
total
在此环境中定义。
ross <- open.account(100)
environment(ross$deposit)
#<environment: 0x000000000ae10db8>
environment(ross$withdraw)
#<environment: 0x000000000ae10db8>
environment(ross$balance)
#<environment: 0x000000000ae10db8>
environment(ross$deposit)$total
#[1] 100