Optionale Argumente mit default-Wert in Ruby
Ich würde gerne eine Funktion erstellen, die optionale Argumente mit default-Werten
def my_function(a = nil, b=nil, c=500)
end
und rufen Sie die Funktion mit den Argumenten, die ich möchte, um anzugeben, nur
my_function(b=100)
Wie kann ich dies in Ruby 1.9.2?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann man nicht tun, das (oder etwas ähnliches) in Ruby < 2.0. Das beste, was Sie tun können, ist:
def foo(mand1, mand2, opt1=:opt1, opt2=:opt2, *splat, mand3, mand4, &block) p local_variables.map {|v| "#{v} = #{eval(v.to_s)}" } end
ist völlig in Ordnung.Argumente gebunden sind Parameter wie diese:
Proc
und an das block-argumentraise
eineArgumentError
Hier ein Beispiel:
So, wie Sie sehen können, aus Schritt 3 oben und von der Beispiel können Sie nicht tun, da optionale Parameter gebunden sind, von Links nach rechts, aber Sie wollen, geben Sie die mittlere argument.
Beachten Sie, dass dies hat Auswirkungen auf API-design: gestalten Sie die parameter-Listen in der Weise, dass die "instabilen" optionale Parameter, d.h. diejenigen, die ein Benutzer wahrscheinlich will sich selbst versorgen, sind am weitesten Links.
Ruby 2.0 hat nun keyword-Argumente, das ist genau das, was Sie suchen:
So, den Sie versuchen zu implementieren keyword-Argumente? Dies soll eine neue Funktion in Ruby 2.0, aber Sie können versuchen, ihn zu imitieren, in 1.9.x mit einem hash von Argumenten statt. Hier ein Beitrag erläutert, wie Sie das erreichen können,, was gibt der folgende code-Beispiel: