【发布时间】:2017-03-03 16:47:48
【问题描述】:
此代码出现在 Intro to 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 应该看,而不是何时。
话虽如此,当我们使用<<- 运算符指向当前环境之外的值时,它指向哪里?这是一个概念性问题,让我无法完全理解它是如何工作的。我了解代码是如何工作的,但我不确定当我们使用 <<- 运算符时该值是从哪里提取的。
【问题讨论】:
-
来自`help("<<-"),它会导致“通过父环境进行搜索......否则在全局环境中进行分配。”这是您的意思吗?
-
即在当前环境中查找,然后是立即调用函数的环境,然后是它的调用环境,等等,直到它到达
.GlobalEnv。如果没有找到,它会在.GlobalEnv中分配一个新变量。
标签: r lexical-scope