【发布时间】:2013-03-14 20:42:58
【问题描述】:
我需要遍历一个数组并将提供的块应用于每个元素,并返回该块返回的第一个真值,这意味着我需要在获得真值后立即停止。
下面是我的代码。我是一个红宝石新手,我不确定这段代码是否在重新发明轮子。也许已经有一个或多个库方法可以做到这一点?还是可以简化这段代码?
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'
【问题讨论】:
-
您正在寻找类似
Enumerable#find的东西,它返回块返回的内容,而不是哪个元素导致块返回真值? -
@muistooshort,是的,谢谢
-
我认为你所做的是关于所有的事情。你可以把它美化一下,然后猴子把它修补到 Enumerable 中,仅此而已。
标签: ruby