困惑如何在ruby中使用lambda进行选择

user3746602 2 ruby lambda

我正在和ruby一起工作,我只是在学习lambdas.我有一个对象数组,我想根据不同的条件从数组中选择某些对象,如下所示:

result = array.select{|ar| ar.number > 4}

我想把select的参数放到一个lambda表达式中,即我想放入|ar| ar.number > 4一个lambda表达式.我尝试了一些事情,包括:

result = array.select{lambda{|g| g.number > 4}}

但这不起作用.

我也试过这个:

l = lambda {g.number > 4}
result = array.select{|g| l}

这也行不通.另外我需要将我的lambda express传递给一个函数,所以我不认为我做的第一种方式会有效.我该怎么做?

Jörg W Mitta.. 11

Enumerable#select需要一个块,而不是一个lambda.所以,你需要传递一个块.

值得庆幸的是,有一个运算符将lambda或proc(实际上是响应的任何东西to_proc)转换为一个块:一元前缀&运算符,它只在参数列表中有效(将proc转换为块)并且在参数列表(将块转换为proc的位置).

所以,如果你有一个lambda l,你可以将它作为一个块传递给方法,foo如下所示:

foo(&l)

你的第二个问题是你的lambda不接受任何参数,但传递给的块select接受一个参数,所以你需要用一个参数创建你的lambda:

l = lambda {|el| el.number > 4 }

# I prefer this syntax, though:
l = -> el { el.number > 4 }

把所有这些放在一起,我们有:

result = array.select(&l)


huocp.. 5

要将lambda(或proc)作为块传递给方法,必须使用特殊的&syntax:

result = array.select &mylambda

此外,您的lambda(或proc)必须指定它将接收和使用的参数的名称.从而:

l = lambda { |g| g.number > 4}
result = array.select &l