我知道我可以adder
使用以下工厂函数创建有状态函数adder_maker
:
adder_maker <- function() {x <- 0; function() {x <<- x+1; x}}
adder1 <- adder_maker()
adder1()
adder1()
environment(adder1)
该函数按预期递增并位于其自己的封闭环境中。
但是,如果我不想将工厂函数存储在中间变量中,那么内部函数最终会出现在全局环境中。
adder2 <- function() {x <- 0; function() {x <<- x+1; x}}()
adder2()
adder2()
environment(adder2)
- 为什么 adder2 不与其匿名父级的环境相关联?
- 如果 adder2 存在于全局环境中,为什么它会返回 1(而不是
Error: object 'x' not found
,在尝试评估内部分配的 RHS 时,x+1
)? - 有没有其他聪明的方法来创建一个行为类似于 adder1 的函数,而不为父函数分配一个变量?