如何在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
期望的方法。