Sie kennen wahrscheinlich die folgende Ruby-Kurzform ( a
ist ein Array):
a.map(&:method)
Versuchen Sie beispielsweise Folgendes in irb:
>> a=[:a, 'a', 1, 1.0]
=> [:a, "a", 1, 1.0]
>> a.map(&:class)
=> [Symbol, String, Fixnum, Float]
Die Syntax a.map(&:class)
ist eine Abkürzung für a.map {|x| x.class}
.
Weitere Informationen zu dieser Syntax finden Sie unter " Was bedeutet map (&: name) in Ruby? ".
Über die Syntax führen &:class
Sie class
für jedes Array-Element einen Methodenaufruf durch.
Meine Frage ist: Können Sie dem Methodenaufruf Argumente liefern? Und wenn ja, wie?
Wie konvertieren Sie beispielsweise die folgende Syntax?
a = [1,3,5,7,9]
a.map {|x| x + 2}
zur &:
Syntax?
Ich behaupte nicht, dass die &:
Syntax besser ist. Ich interessiere mich nur für die Mechanik der Verwendung der &:
Syntax mit Argumenten.
Ich nehme an, Sie wissen, dass dies +
eine Methode für die Integer-Klasse ist. Sie können Folgendes in irb versuchen:
>> a=1
=> 1
>> a+(1)
=> 2
>> a.send(:+, 1)
=> 2