我有一系列的对象,其中一些响应:描述,我想从第一个真实的描述中得到描述。我可以这么做:
objects.detect{|o| o.try(:description)}.description
或者:
objects.map{|o| o.try(:description)}.detect{|o| o}
但是第一个数组不是干的(这里有两次描述),第二个在找到值之前遍历整个数组。在ruby标准库中,或者在rails的扩展中,是否有什么东西可以让我这样做:
objects.detect_and_return{|o| o.try(:description)}
我知道我写起来很容易,但是标准库足够大,我可能不需要。有没有一个功能可以像我的
detect_and_return
那样工作? 最佳答案
我还没见过这样的方法,我找到的最接近的方法是在gem中找到的方法。似乎他们偶然发现了同样的问题并实现了这一点:
module Enumerable
def capture_first
each do |o|
return yield(o) || next
end
nil
end
end
您还可以查看rubyArray库中的Enumerable和facets方法,看看是否找到了类似的方法。facets包含了很多好东西,所以你可能会很幸运。