我需要迭代数组并将所提供的块应用于每个元素,并返回该块返回的第一个真值,这意味着我需要立即停止,只要我得到真正的价值。找到数组中的第一个元素,其中块返回true并返回块的返回值
下面是我的代码。我是一个红宝石新手,我不确定这个代码是否会重新发明轮子。也许有一个库方法可以做到这一点?或者可能是这段代码可以简化?
RS = {
:x => %w(\d+ a\d+ bb\d+ ccc\d+).map{|x| /^#{x}$/},
:y => %w(\w+ 1\w+ 22\w+ 333\w+).map{|x| /^#{x}$/}
}.freeze
def find s, t
r = RS[s]
if r
r.each do |p|
m = p.match t
return m if m
end
nil
end
end
p find :x, 'bb12345'
你正在寻找的东西像['可枚举#find'(HTTP:// ruby- doc.org/core-2.0/Enumerable.html#method-i-find)返回块返回的内容而不是哪个元素导致块返回真值? – 2013-03-14 21:24:20
@ muistooshort,是的,谢谢 – akonsu 2013-03-14 22:32:47
我认为你正在做的是关于所有的事情。你可以把它修改得很好,猴子将它修改为Enumerable,但这就是它。 – 2013-03-14 23:20:59