R-Muster zum Ändern von Argumenten, die an die generische Funktion übergeben werden

8

Ich habe eine generische Funktion namens foo . Es funktioniert anders in den Klassen bar und baz , aber es gibt eine gemeinsame Vorverarbeitung, die nur einmal durchgeführt werden muss. Was ist die idiomatische Art, dies auszuführen?

In meinem albernen Beispiel möchte ich das übergebene Objekt mit 10 multiplizieren. Wenn die Methode aufgerufen wird, wird der ursprüngliche Wert auf der Konsole ausgegeben. Ich habe die Sprachdefinition gelesen und weiß, dass das folgende Muster nicht funktioniert. Meine Frage ist: Wo oder wie behandle ich die gemeinsame Verarbeitung von generischen Argumenten vor dem Aufruf der Methode?

%Vor%     
Zelazny7 29.12.2015, 14:11
quelle

1 Antwort

12

1) Fügen Sie foo über dem eigentlichen generischen hinzu. Ändern Sie foo , um den vorläufigen Code auszuführen, und rufen Sie foo_ wie abgebildet auf. Benennen Sie foo.bar und foo.baz in foo_.bar bzw. foo_.baz um, so dass wir übrig bleiben (wir haben dem Beispiel auch Zeilenumbrüche hinzugefügt):

%Vor%

Teste es jetzt:

%Vor%

Ein Beispiel hierfür in einem weit verbreiteten Paket finden Sie in der Quelle dplyr :: mutiere

2) NextMethod Ein anderer Weg wäre, jedem Objekt einen Klassenvektor mit zwei Klassen zu geben, wobei "foo" eine Unterklasse von "bar" im Fall von a und von "baz" erstellt. im Fall von b . Dann benutze NextMethod . Lösung (1) scheint einfacher zu sein und es mag seltsam erscheinen, dass "foo" eine Unterklasse von "bar" und "baz" ist, aber hier ist ein Beispiel für diesen Fall:

%Vor%

Testen Sie, dass wir die Definitionen von a und b so geändert haben, dass sie mit diesem Ansatz funktionieren:

%Vor%     
G. Grothendieck 29.12.2015, 15:34
quelle

Tags und Links