1)如果我们定义inner
在定义范围内outer
那么它将可以访问变量outer
.
outer <- function(x,y,z) {
inner <- function(x) x*y*z*a
a <- x*y*z
inner(x)
}
outer(2, 3, 4)
## [1] [1] 576
2)我们可以将内部重置其环境复制到当前运行实例内的环境outer
。这就需要我们修改outer
但不是inner
.
inner <- function(x) x*y*z*a
outer <- function(x,y,z) {
environment(inner) <- environment() # makes temp copy of inner
a <- x*y*z
inner(x)
}
outer(2, 3, 4)
## [1] [1] 576
3)我们可以更改内部以使用调用者的变量。这就需要我们修改inner
但不是outer
.
inner <- function(x) eval.parent(substitute(x*y*z*a))
outer <- function(x,y,z) {
a <- x*y*z
inner(x)
}
outer(2, 3, 4)
## [1] [1] 576