我尝试了解R您可以访问的范围演示demo(scoping).
我不明白total变量的保存位置.首先,我认为根据help("<<-")
运算符<< - 和 - >>通常仅在函数中使用,并且通过父环境搜索要分配的变量的现有定义.如果找到这样的变量(并且其绑定未被锁定),则重新定义其值,否则在全局环境中进行赋值.
它在global environment.但是因为我在那里找不到它,(ls(environment))我想open.account <- function(total)为由赋值创建的所有实例创建一个总变量open.account().但是,如果我创建一个实例,ross <- open.account(100)我找不到变量.
ross
...
<environment: 0x0000000011fbe998>
Run Code Online (Sandbox Code Playgroud)
与ls(environment(environment: 0x0000000011fbe998)).结果getAnywhere(total)是no object named ‘total’ was found.那么不同版本的生活在哪里total?
ross列表中的函数是闭包,即具有数据的函数.(从技术上讲,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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |