严格来说,作用域分配<<-是分配给父环境还是全局环境? [英] Strictly speaking does the scoping assignment <<- assign to the parent environment or global environment?

查看:97
本文介绍了严格来说,作用域分配<<-是分配给父环境还是全局环境?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

通常,父环境 是全局环境.

Often the parent environment is the global environment.

但是有时候不是.例如,在函数内的函数中,或在tryCatch()中的错误函数中.

But occasionally it isn't. For example in functions within functions, or in an error function in tryCatch().

严格来说,<<-是分配给全局环境还是仅分配给父环境?

Strictly speaking, does <<- assign to the global environment, or simply to the parent environment?

推荐答案

尝试一下:

env = new.env()
env2 = new.env(parent = env)

local(x <<- 42, env2)
ls(env)
# character(0)
ls()
# [1] "env"  "env2" "x"

但是:

env$x = 1
local(x <<- 2, env2)
env$x
# [1] 2

...所以<<- 确实遍历整个父环境链,直到找到给定名称的现有对象并将其替换.但是,如果找不到任何此类对象,则会在.GlobalEnv中创建一个新对象.

… so <<- does walk up the entire chain of parent environments until it finds an existing object of the given name, and replaces that. However, if it doesn’t find any such object, it creates a new object in .GlobalEnv.

(文档状态大致相同.但是在这种情况下,进行实验以获得更好的理解无可厚非.)

(The documentation states much the same. But in a case such as this nothing beats experimenting to gain a better understanding.)

这篇关于严格来说,作用域分配&lt;&lt;-是分配给父环境还是全局环境?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆