对比以下两个代码段:
1)
> y <- 1
> g <- function(x) {
+ y <- 2
+ UseMethod("g")
+ }
> g.numeric <- function(x) y
> g(10)
[1] 2
Run Code Online (Sandbox Code Playgroud)
2)
> x <- 1
> g <- function(x) {
+ x <- 2
+ UseMethod("g")
+ }
> g.numeric <- function(y) x
> g(10)
[1] 1
Run Code Online (Sandbox Code Playgroud)
在第一个片段中,g.数字的自由变量(即"y")在g的本地环境中进行评估,而在第二个片段中,g.numeric的自由变量(即"x")在全局环境中进行评估.怎么会这样?
正如它在写R扩展中所说:
方法必须包含泛型的所有参数,包括......如果泛型的参数.
你的第二个例子没有(g(x)vs g.numeric(y)).如果重新定义g <- function(y),一切都与第一个示例相同.
> x <- 1
> g <- function(y) {
+ x <- 2
+ UseMethod("g")
+ }
> g.numeric <- function(y) x
> g(10)
[1] 2
Run Code Online (Sandbox Code Playgroud)