gpt4 book ai didi

r - 环境如何记住它的存在?

转载 作者:行者123 更新时间:2023-12-04 02:34:29 25 4
gpt4 key购买 nike

adder <- local({
x <- 0
function() {x <<- x+1; x}
})

或等效

adderGen <- function(){
x <- 0
function() {x <<- x+1; x}
}
adder<-adderGen()

调用 adder() 将返回 1,再次调用将返回 2,依此类推。但是 adder 是如何计算这个的呢?我看不到任何影响全局环境的变量,那么实际用来存储这些变量的是什么?特别是在第二种情况下,您希望 adder 忘记它是在函数调用内部生成的。

最佳答案

每个函数都保留将其定义为函数一部分的环境。如果 f 是一个函数,那么 environment(f) 会显示它。通常 adderGen 中的执行环境在退出时会被丢弃,但是因为 adderGen 传递出一个函数,其环境是 adderGen 中的执行环境那个环境作为传递出去的函数的一部分被保留。我们可以通过显示adderGen中的执行环境来验证,然后验证它是否与adder的环境相同。 trace 函数会在adderGen 主体的开头插入打印语句,并显示每次adderGen 运行时的执行环境。 environment(adder) 是相同的环境。

trace(adderGen, quote(print(environment())))
## [1] "adderGen"

adder <- adderGen()
## Tracing adderGen() on entry
## <environment: 0x0000000014e77780>

environment(adder)
## <environment: 0x0000000014e77780>

关于r - 环境如何记住它的存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62461746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com