我有以下片段:

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"

10-06 13:20