首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >全局变量

全局变量
EN

Stack Overflow用户
提问于 2017-04-19 22:39:10
回答 1查看 65关注 0票数 1

我有一个关于在R中使用全局变量的问题。我写了两个例子

第一个版本:

代码语言:javascript
复制
a <- 1
fun <- function(b){
    return(a+b)
}
fun(b)

第二个版本:

代码语言:javascript
复制
a <- 1 
fun <- function(a,b){
    return(a+b)
}
fun(a,b)

我想知道哪个版本是正确的,还是推荐的。

EN

回答 1

Stack Overflow用户

发布于 2017-04-19 23:42:33

由于各种原因(可以在标题encapsulation下大致分组),函数内部依赖全局状态是不可取的。因此,在大多数情况下,第二个版本会更好。

但是,一旦在非全局环境中定义了变量,情况就会发生变化。在这种情况下,您已经将状态封装到可以整齐地放好的东西中。这有时很有用,因为它允许您基于某些输入创建函数。

经典的例子类似于:

代码语言:javascript
复制
adder = function (value_to_add) {
    function (x) {
        x + value_to_add
    }
}

这可能看起来晦涩难懂,但它只是一个返回另一个函数的函数:您可以使用它来创建函数。例如,在这里,我们创建了一个函数,该函数接受一个参数并将值5添加到该参数中:

代码语言:javascript
复制
add5 = adder(5)

这里有一个将π加入到它的论点中:

代码语言:javascript
复制
add_pi = adder(pi)

这两个都是正常函数:

代码语言:javascript
复制
> add5(10)
[1] 15
> add_pi(10)
[1] 13.14159

这两个函数add5add_pi都在单独的环境中访问位于函数外部的变量value_to_add。重要的是要认识到这些是彼此不同的环境:在不同的环境中,add5value_to_addadd_pivalue_to_add是不同的值。

代码语言:javascript
复制
> environment(add5)$value_to_add
[1] 5
> environment(add_pi)$value_to_add
[1] 3.141593

(environment(f)允许您检查函数f所属的环境。$用于访问该环境中的名称。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43498898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档