S3泛型中的可变范围

时间:2015-05-22 03:22:44

标签: r scope r-s3

我有以下代码段:

y <- 1
g <- function(x) {
  y <- 2
  UseMethod("g")
}
g.numeric <- function(x) y
g(10)
# [1] 2

我不明白,为什么可以访问y中的g.numeric <- function(x) y。据我所知,范围就在通用(g <- ...)的定义范围内。有谁可以向我解释,这怎么可能?

1 个答案:

答案 0 :(得分:4)

可以在?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"