UseMethod调用的方法范围

Eva*_*Aad 7 oop generics r

对比以下两个代码段:

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")在全局环境中进行评估.怎么会这样?

Jos*_*ich 7

正如它在写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)