2009-08-28 13 views

cevap

68

bir lambda oluşturun ve sonra & operatörü ile bir blok dönüştürmek:

isodd = lambda { |i| i % 2 == 1 } 
[1,2,3,4].select(&isodd) 
+3

Serbest duruş prod'unu oluşturmak için "stabi lambda" operatörünü de kullanabilirsiniz. Http://stackoverflow.com/questions/9340117/what-is-the-stab-operator-in-ruby sayfasına bakın. Ruby 1.9'dan itibaren mevcuttur. Tabii ki, sadece tadı ve kodlama tarzı :) – zealoushacker

+0

gelecekteki okuma için bir konu, bir de bu gibi lambdas oluşturabilir: lambda_name = ->() {kouts "merhaba dünya"} – BKSpurgeon

18

adlandırılmış bir Proc oluşturmak ve blokları ele yöntemleri için iletebilirsiniz:

isodd = Proc.new { |i| i % 2 == 1 } 
x = [1,2,3,4] 
x.select(&isodd) # returns [1,3] 

& Operatör Proc/lambda ve bir blok, select gibi hangi yöntemleri beklemek arasında dönüştürür.

27
puts x.select(&method(:isodd)) 
+0

Dave ve Daniel'in cevapları da iyidir. Bu bir alternatif. –

+2

+1 Yanıt, lambda/proc olarak yeniden yazmak istemediğiniz varolan bir yönteminiz olduğunda kullanışlıdır. Ayrıca, yöntemin belirli bir nesnede çağrılması gerekirse de çalışır: 'x.select (& obj.method (: isodd))' – Kelvin

+0

güzel ve bu doğru soruyu cevaplandırır - bu adam var olanı nasıl tamamlayacağını bilmek ister yöntem ve bir proc olarak geçirin – Dan

İlgili konular