def match_line regex
@line.match(regex) if !regex.is_a?(Array)
regex.each {|rgx|
results = @line.match(rgx)
return results if !results.nil?
}
return nil
end
这看起来像是可以用一行惯用的方式完成的,我只是没有看到如何。
答案 0 :(得分:5)
[*regex].map{ |re| @line.match re }.compact.first
或
Array(regex).map{ |re| @line.match re }.compact.first
答案 1 :(得分:1)
[*regex].find{|r| @line.match(r)}
return $~ #will return the last MatchedData returned, otherwise nil.
$~
将返回最后返回的MatchedData,否则为nil。
答案 2 :(得分:0)
def match_line regex
[*regex].each { |r| return r if (r = @line.match r) }
end
答案 3 :(得分:0)
在这种情况下传递参数就像
一样,这是一种首选的惯例match_line(regex1, regex2, ...)
或
match_line(*array_of_regexes)
而不是
match_line([regex1, regex2, ...])
或
match_lines(array_of_regexes)
所以你对阵列的调整是不必要的。
def match_line *regex
regex.detect{|r| @line =~ r}
Regexp.last_match
end