2017-12-06 1 views
0

In letzter Zeit habe ich einige Sachen in R6 programmiert, und während ich Spaß beim Umgang mit einigen Objekten hatte, kam eine interessante Frage auf. Wenn eine private Methode zu schaffen (zB foo, von der Bar) und es in anderen öffentlichen Methoden aufrufen funktioniert es, wenn ich es entweder rufen mit:Unterschied zwischen Selbst- und Privatmethodenaufruf in R6

self$foo 

und

private$foo 

Was ich frage ist: Was ist der Unterschied zwischen diesen beiden Möglichkeiten, eine Methode in R6 aufzurufen? Vielen Dank im Voraus!

Antwort

1

Von der "Einführung in die R6 Klassen" Vignette (Hervorhebung von mir):

self

Innen Methoden der Klasse, self bezieht sich auf das Objekt. öffentliche Mitglieder des Objekts (alles, was Sie bisher gesehen haben) mit self$x

zugegriffen

private

Dem öffentlichen Mitgliedern mit self zugegriffen werden, wie self$add(), privaten Mitgliedern zugegriffen werden mit private, wie private$queue.

Also, auch wenn Sie können Zugang private Methoden durch self, sollten Sie es durch private tun. Verlassen Sie sich nicht auf ein Verhalten, das möglicherweise verschwindet, da die Dokumentation sagt, dass es nicht so funktionieren sollte.

Das heißt, kann ich private Methoden Zugriff nicht self mit:

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

Vielen Dank für Ihre schnelle und klare Antwort! – Erdi