Hadley声明类分配class(x) <- c("A", "B")
执行以下操作:
如下一节所述,R按照以下顺序查找方法 它们出现在类向量中。所以在这个例子中, 就像A类是从B类继承的-如果未为A定义方法, 它会退回到B。但是,如果您切换了 类,则相反!
在这里,我的理解是
print.mytest <- function(x, ...) {
cat(paste0("Just a test for class mytest: ", x, "\n")
}
x <- 1
print(class(x))
# [1] "numeric"
print(x)
# [1] 1
class(x) <- c("mytest")
print(class(x))
# [1] "mytest"
print(x)
# [1] "Just a test for class mytest: 1"
这是我不了解的地方:我期望使用numeric
类,但从未使用过。
因此,在第二种情况下,我期望输出[1] 1
。
x <- 1
print(class(x))
# [1] "numeric"
class(x) <- c(class(x), "mytest")
print(class(x))
# [1] "numeric" "mytest"
print(x) # Not understood (http://adv-r.had.co.nz/S3.html)
# [1] "Just a test for class mytest: 1"
x <- 1
print(class(x))
# [1] "numeric"
class(x) <- c("mytest", class(x))
print(class(x))
# [1] "mytest" "numeric"
print(x) # Not understood...
# [1] "Just a test for class mytest: 1"
文档?class
也声明
将泛型函数fun应用于具有class的对象时 属性c(“ first”,“ second”),系统搜索函数 称为fun.first,如果找到它,则将其应用于对象。如果不 找到这样的函数,尝试一个名为fun.second的函数。如果不 类名产生一个合适的函数,函数fun.default是 使用(如果存在)。
感谢下面的答案
x <- 1
print(class(x))
class(x) <- c("mytest2", "mytest")
print(class(x))
print(x)
# Just a test for class mytest2: 1
x <- 1
print(class(x))
class(x) <- c("mytest", "mytest2")
print(class(x))
print(x)
# Just a test for class mytest: 1
答案 0 :(得分:5)
仅在未找到类向量中用于类的方法的情况下,才使用默认方法。在问题中没有print.numeric
,但是有print.mytest
,因此在两种情况下都使用它。它永远不会寻找print.default
,因为它可以在类向量中列出的方法中找到一个方法。
也就是说,它查看class(x)
的第一个元素,如果在这种情况下,找到了该类的print
方法,它将使用它。如果不是,它将移至class(x)
的第二个元素并寻找该类的print
方法。如果找到它,它将使用它。如果class(x)
仅存在两个元素,并且找不到两个元素,则将使用默认方法。
在class(x)
是c("numeric", "mytest")
的情况下,没有print.numeric
方法,因此它会寻找print.mytest
并找到它以便使用它。
在class(x)
为c("mytest", "numeric")
的情况下,它会找到print.mytest
并因此使用它。
因此,在两种情况下,print.mytest
都是选择的方法。