UseMethod调用的方法范围

时间:2013-12-28 19:02:12

标签: r oop generics

对比以下两个代码段:

1)

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

2)

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

在第一个片段中,g。数字的自由变量(即“y”)在g的本地环境中进行评估,而在第二个片段中,g.numeric的自由变量(即“x”)在全局环境中进行评估。怎么样?

1 个答案:

答案 0 :(得分:7)

正如Writing R Extensions中所述:

  

方法必须包含泛型的所有参数,包括......如果泛型的参数。

您的第二个示例没有(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