可以定义为R6 /引用类索引方法?

问题描述 投票:0回答:1

我有一个R6类,基本上是围绕一个矩阵状物体的包装。我想定义为我的类中的方法,可以让直接矩阵的我食指和子元素。

此刻,我的代码看起来是这样的:

cls <- R6Class("cls", public=list(
    initialize=function(...)
    {
        private$mat <- matrix(...)
        private$mat
    }),

    private=list(mat=NULL)
)

"[.cls" <- function(x, ...)
{
    x$.__enclos_env__$private$mat[...]
}

z <- cls$new(1:25, 5, 5)
z[1, 1]
# [1] 1

然而,这需要创建然后直接访问我的类的私有成员顶级[方法。我想避免这种情况,如果可能的话。

我想我的类中添加一个方法,但它不工作:

cls <- R6Class("cls", public=list(
    initialize=function(...)
    {
        private$mat <- matrix(...)
        private$mat
    },

    "["=function(x, ...)
    {
        "["(private$mat, ...) 
    }),

    private=list(mat=NULL)
)

z[1, 1]
# Error in z[1, 1] : object of type 'environment' is not subsettable

有没有办法做到这一点不违反封装?

虽然这是R6,使用引用类的答案也欢迎。

r reference-class r6
1个回答
0
投票

这是不可能的目前与R6类。

有关于这个话题的讨论:https://github.com/r-lib/R6/issues/153

© www.soinside.com 2019 - 2024. All rights reserved.