我有一个R6
类,我想S3
为它添加一个方法。我发现的文档简要提到了要使用S3
dispatch on R6
you must have class = TRUE
,但我找不到应该如何完成的示例。
我确实从经验上看到,简单地以这种形式编写一个 S3 方法是s3generic.r6class
有效的,但我想知道这是否确实是S3
为R6
.
例如,假设我有一R6
门课可以增强list
library(R6)
R6list <- R6Class(
"R6list",
public = list(
orig = NULL,
initialize = function(x) {
self$orig <- x
}
)
)
问题 1
自然,我想提供一个获取底层列表的方法,所以我想添加一个as.list
方法。在类中添加 S3 泛型和as.list
公共函数是否标准?我直观的答案是两者都加。
R6list <- R6Class(
"R6list",
public = list(
orig = NULL,
initialize = function(x) {
self$orig <- x
},
as.list = function() {
self$orig
}
)
)
as.list.R6list <- function(x, ...) {
x$as.list()
}
所以现在如果我有一个对象mylist <- R6list$new(as.list(letters[1:5]))
,我可以调用as.list(mylist)
或mylist$as.list()
. 其中一个比另一个更受欢迎吗?
问题2为类编写方法
有什么特别之处,或者我上面写的内容是否足够且正确?我不确定该方法是否必须在类定义之外编写,或者是否以某种方式提供了一种在其中编写方法的方法,以便与该类相关的所有代码都本地化。S3
R6
S3
R6
S3