【发布时间】:2019-02-04 22:22:05
【问题描述】:
我知道我可以使用工厂函数 adder_maker 创建有状态函数 adder,如下所示:
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 的函数,而无需为父函数分配变量?
【问题讨论】:
-
它适用于
adder2 <- (function() {x <- 0; function() {x <<- x+1; x}})(),但我不确定我能否很好地解释原因。
标签: r function r-environment