4 Stimmen

Kann ich erkennen, ob eine Methode in Ruby etwas zurückgeben muss?

Ich tue einige Metaprogrammierung in Ruby und in der method_missing-Implementierung frage ich mich, wenn ich sagen kann, wenn der Aufruf Website in einer Zuweisung verwendet wird?

Zum Beispiel:

x = special_function 'param'

würde von der method_missing-Implementierung abgefangen werden. Ich würde gerne wissen, ob ich feststellen kann, ob die Funktion wie folgt aufgerufen wurde:

special_function 'param'

D.h. ohne eine linke Seite bei der Zuordnung.

Ist es in Ruby möglich, den Unterschied zwischen den beiden obigen Beispielen im Code zu erkennen?

4voto

Nikhil Punkte 2922

Ich glaube nicht, dass dies möglich ist, einfach weil jede Methode immer einen etwas und die Auswertung einer Methode ist unabhängig von dem Kontext, in dem sie aufgerufen wird.

Die Zuweisung ist in diesem Fall nebensächlich und nutzt nur zufällig das, was die Methode zurückgibt.

Gibt es einen Grund, warum Sie diese Anrufe unterscheiden wollen? Vielleicht gibt es andere Möglichkeiten, dasselbe Problem zu lösen, indem Sie in Ihren Methoden eine Namenskonvention verwenden, um die Verwendungszwecke zu trennen.

1voto

fl00r Punkte 81243

Hier gibt es keinen Unterschied zu Ihrem Fall, soweit ich weiß.

Ruby ruft Ihren Code von rechts nach links auf.

Es wird also zunächst versuchen, den Befehl auszuführen:

special_function 'param'

Und dann wird das Ergebnis an x .

Wenn also special_function Methode nicht definiert ist, wird sie an method missing und wenn sie es irgendwie verarbeiten kann, wird sie etwas zurückgeben. Und x wird diesem aktuellen Wert zugewiesen

PS wie ich @ne0lithic_coder Antwort gelesen habe, sieht es so aus, als ob ich Ihre Frage falsch verstanden habe. Sie können dieses Thema sehen: Kann Ruby nichts zurückgeben?

PPS Wenn Sie nicht zuordnen möchten, dass x in einigen Fällen können Sie es versuchen:

val = special_function 'param'
x = val unless val.nil? # if val

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X