此代码显示在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应该在哪里,而不是时。
话虽这么说,当我们使用<<-
运算符指向当前环境之外的值时,指向?这是一个概念性的问题,阻止我完全掌握它的工作原理。我理解代码是如何工作的,但我不确定在使用<<-
运算符时从哪里获取值。
答案 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帖子。