【问题标题】:Difference between self and private method call in R6R6中self和private方法调用的区别
【发布时间】:2017-12-06 16:46:51
【问题描述】:

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

self$foo

private$foo

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

【问题讨论】:

    标签: r r6


    【解决方案1】:

    来自“R6 课程简介”小插图(重点是我的):

    self

    类的内部方法,self 指的是对象。 Public 对象的成员(到目前为止您所看到的)都可以通过 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-16
      • 2013-12-02
      • 1970-01-01
      • 2016-02-24
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 2013-05-28
      相关资源
      最近更新 更多