我有一系列的对象,其中一些响应:描述,我想从第一个真实的描述中得到描述。我可以这么做:

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库中的Enumerablefacets方法,看看是否找到了类似的方法。facets包含了很多好东西,所以你可能会很幸运。

09-10 01:41
查看更多