我有一个R6
类,我想为它添加一个S3
方法。我发现的文档简要提到,为了在S3
上使用R6
发送,您必须拥有class = TRUE
,但我无法找到应该如何完成的示例。< / p>
我确实在经验上看到只是以s3generic.r6class
形式编写S3方法,但我想知道是否确实以正确的方式为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
方法的方法,以便所有与课程相关的代码已本地化。