我有以下片段:
y <- 1
g <- function(x) {
y <- 2
UseMethod("g")
}
g.numeric <- function(x) y
g(10)
# [1] 2
我不明白,为什么可以在
y
中访问g.numeric <- function(x) y
。据我了解,y的范围仅在通用(g <- ...)
的定义之内。谁能告诉我,这怎么可能? 最佳答案
可以在?UseMethod
帮助页面中找到此行为的描述
UseMethod创建一个新的函数调用,并带有与泛型匹配的匹配参数。保留在调用UseMethod之前定义的所有局部变量
因此,在调用UseMethod
的函数中定义的任何局部变量都将作为局部变量传递到下一个函数。你可以看到这个
g.numeric <- function(x) ls() #lists all variables in current environment
g(10)
# [1] "x" "y"
g.numeric(10)
# [1] "x"