如何在Ruby中创build可重用的块/ proc / lambda?

我想创build一个filter,并能够将其应用于数组或散列。 例如:

def isodd(i) i % 2 == 1 end 

我想能够像这样使用它:

 x = [1,2,3,4] puts x.select(isodd) x.delete_if(isodd) puts x 

这似乎应该是直截了当的,但我无法弄清楚我需要做什么使它工作。

创build一个lambda,然后使用&运算符转换为一个块:

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

您可以创build一个命名的Proc并将其传递给具有块的方法:

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

&运算符在一个Proc / lambda和一个块之间转换,这是select期望的方法。