Muhtemelen aşağıdaki Ruby kısaltmasına aşinasınız ( abir dizidir):
a.map(&:method)
Örneğin, irb'de şunu deneyin:
>> a=[:a, 'a', 1, 1.0]
=> [:a, "a", 1, 1.0]
>> a.map(&:class)
=> [Symbol, String, Fixnum, Float]
Sözdizimi a.map(&:class), için bir kısaltmadır a.map {|x| x.class}.
Bu sözdizimi hakkında daha fazlasını " harita (&: ad) Ruby'de ne anlama geliyor? " Bölümünde okuyun .
Sözdizimi aracılığıyla, her dizi öğesi için &:classbir yöntem çağrısı yaparsınız class.
Sorum şu: yöntem çağrısına argümanlar sağlayabilir misiniz? Ve eğer öyleyse, nasıl?
Örneğin, aşağıdaki sözdizimini nasıl dönüştürürsünüz?
a = [1,3,5,7,9]
a.map {|x| x + 2}
için &:sözdizimi?
Ben demiyorum &:sözdizimi iyidir. Yalnızca &:sözdizimini argümanlarla kullanmanın mekaniğiyle ilgileniyorum .
Bunun +Integer sınıfında bir yöntem olduğunu bildiğinizi varsayıyorum . Aşağıdakileri irb'de deneyebilirsiniz:
>> a=1
=> 1
>> a+(1)
=> 2
>> a.send(:+, 1)
=> 2