词汇范围和R中的<< - 运算符

时间:2017-03-03 16:47:48

标签: r lexical-scope

此代码显示在R手册中。

open.account <- function(total) {
    list(deposit = function(amount) {
        if (amount <= 0) stop("Deposits must be positive!\n")
        total <<- total + amount
        cat(amount, "deposited.  Your balance is", total, "\n\n")
    }, withdraw = function(amount) {
        if (amount > total) stop("You don’t have that much money!\n")
        total <<- total - amount
        cat(amount, "withdrawn.  Your balance is", total, "\n\n")
    }, balance = function() {
        cat("Your balance is", total, "\n\n")
    })
}

这应该模拟银行账户的运作方式,在计算存款和取款时跟踪运行余额。为了做到这一点,程序需要在每次事务之前查看余额,这是动态的,因此不能用函数定义。这就是我有点模糊的地方......

我的问题是关于<<-运算符,它允许函数在环境之外索引total的值。

词法范围规则规定变量或对象的值是在定义的环境中确定的。这决定 r应该在哪里,而不是

话虽这么说,当我们使用<<-运算符指向当前环境之外的值时,指向?这是一个概念性的问题,阻止我完全掌握它的工作原理。我理解代码是如何工作的,但我不确定在使用<<-运算符时从哪里获取值。

1 个答案:

答案 0 :(得分:2)

  

运算符'&lt;&lt; - '和' - &gt;&gt;'通常仅用于函数,        并导致搜索通过父环境进行搜索        已分配变量的现有定义。如果这样的话        找到变量(并且它的绑定没有被锁定)然后是它的值        被重新定义,否则分配发生在全球        环境

全球一级的变量

z <- 10

不修改z

的全局值
myfun <- function(x){
 z <- x
print(z)
}

修改myfun中z的值,但不要在全局级别修改z。

    myfun0 <- function(x){
     z <- x
       myfun1 <- function(y){
         z <<- (y+1)
}

  myfun1(x)
    print(z)
         }

修改全局环境中的z

myfunG <- function(x){
z <<- x
print(" z in the global envronment is modified")
}

请参阅this帖子。