Leider funktionieren Dinge wie (f+g)(3)
, wobei f und g beide unäre Funktionen sind, in R nicht. Daher habe ich versucht, den "+" Operator für unäre Funktionen auf folgende Weise zu überladen:
Aber wenn ich versuche, das zu benutzen, tut das nichts. Der Code
%Vor% erzeugt den gleichen Fehler, als wäre +.function
noch nicht definiert.
Nach einiger Zeit habe ich herausgefunden, dass es tatsächlich eine Möglichkeit gibt, Funktionen auf diese Weise hinzuzufügen: Wenn die Funktionen Memberfunktionen einer Referenzklasse sind, funktioniert das! Das heißt, der folgende Code (zusammen mit der "+" Definition von oben)
%Vor%gibt (wie erwartet) "8" zurück. Daher habe ich bereits eine Art Workaround für mein Problem. Jetzt sind meine Fragen:
Was ist der Grund für dieses seltsame Verhalten? Warum kümmert sich +.function
nicht um die "normale" Funktion, sondern um die Funktionen der Klassenmitglieder? Hat jemand eine Idee wie man den Operator auf übliche Funktionen "erweitert"?
Wenn Sie die Klasse a
erneut definieren, zum Beispiel wie class(a)<-"ownfunction"
(oder besser noch class(a)<-c("ownfunction","function")
, und Ihre "+.function"
als "+.ownfunction"
, dann funktioniert (a+a)(2)
.
Es scheint, dass die Klasse function
auf eine spezielle Art behandelt wird: Wenn Sie debug("+.function");(a+a)(2)
ausführen, sehen Sie, dass "+.function"
nicht einmal aufgerufen wird.
EDIT: Siehe Kommentare.
Als Workaround können Sie einen speziellen Operator definieren ( %...%
) gefällt das:
Tags und Links class r function oop reference-class