2017-12-06 9 views
0

最近、私はR6でいくつかのものをコーディングしていましたが、いくつかのオブジェクトを扱うのが楽しい間に興味深い質問が出ました。R6での自己メソッド呼び出しとプライベートメソッド呼び出しの違い

self$foo 

private$foo 

私は何を求めていますがです:プライベートメソッドを作成する(例えばFOO、バーの)および他のpublicメソッドの内部でそれを呼び出すとき、私はどちらか使用して、それを呼び出した場合、それは動作します: R6でメソッドを呼び出す2つの方法の違いは何ですか? ありがとうございます!

答えて

1

ビネット(強調鉱山) "R6クラスの概要" から:クラスの

self

インサイド方法、selfは、オブジェクトを参照します。オブジェクトの公開メンバー(すべてはあなたがこれまで見てきたが)self$add()のように、プライベートメンバーがアクセスされ、self$x

パブリックメンバーが selfでアクセスしているのに対し

private

でアクセスされていますprivateprivate$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 
+0

はあなたの迅速かつ明確な答えをありがとう! – Erdi

関連する問題