【发布时间】:2014-06-12 08:54:18
【问题描述】:
我对 R 很陌生,但是来自 Scheme——它也是词法作用域并且有闭包——我希望能够在闭包中改变外部变量。
例如,在
foo <- function() {
s <- 100
add <- function() {
s <- s + 1
}
add()
s
}
cat(foo(), "\n") # prints 100 and not 101
我希望foo() 返回 101,但它实际上返回 100:
$ Rscript foo.R
100
我知道 Python 有 global 关键字来声明变量的范围(但不适用于此示例)。 R 是否需要类似的东西?
我做错了什么?
更新
啊,问题是我在add 中创建了一个新,局部变量s 遮蔽了外部s?如果是这样,我如何在不创建局部变量的情况下改变s?
【问题讨论】:
-
版主可以重复关闭,或者您可以加入并投票以关闭会员资格。
-
@BondedDust Gotcha,我也投票赞成关闭它。只是在谷歌搜索时遇到了问题——实际上直到我在这里发布之前我都没有找到解决方案。所以其他模组可能会决定如何处理它。
-
再投两票,无论版主是否注意,它将被关闭。您可能会发现引用类工具是一种适合您的编程风格的范例,并且不会被常规 R 使用视为危险。它使用命名环境并让您拥有“全局”变量的一些特性。
-
谢谢。我将支持我的投票来关闭它。谢谢大家!