R6中自我和私有方法调用之间的区别

时间:2017-12-06 16:46:51

标签: r r6

最近我发现自己在R6编写了一些东西,并且在处理一些对象时很有趣,一个有趣的问题出来了。当创建一个私有方法(例如,条形图的foo)并在其他公共方法中调用它时,如果我使用它调用它,它就可以工作:

self$foo

private$foo

我要问的是:这两种方法在R6中调用方法有什么区别? 提前谢谢!

1 个答案:

答案 0 :(得分:2)

来自" R6课程简介"小插图(强调我的):

self

  

类的内部方法,self指的是对象。使用self$x

访问对象的公开成员(您目前所见)

private

  

使用self访问公共成员时,self$add()可以使用private访问私人成员,例如private$queue

因此,即使您可以通过self访问私有方法,您也应该通过private进行访问。不要依赖可能会消失的行为,看看文档说它不应该像那样工作。

也就是说,我无法使用self访问私有方法:

library(R6)

bar <- R6Class("bar",
  private = list(
    foo = function() {
      message("just foo it")
    }
  ),
  public = list(
    call_self = function() {
      self$foo()
    },
    call_private = function() {
      private$foo()
    }
  )
)

b <- bar$new()
b$call_private()
# just foo it
b$call_self()
# Error in b$call_self() : attempt to apply non-function