解决方法
我建议用新方法扩展Hash而不是替换has_key?.
class Hash def has_rkey?(search) search = Regexp.new(search.to_s) unless search.is_a?(Regexp) !!keys.detect{ |key| key =~ search } end end
这将使用字符串,符号或正则表达式作为参数.
irb> h = {:test => 1} => {:test=>1} irb> h.has_rkey?(:te) => true irb> h.has_rkey?("te") => true irb> h.has_rkey?(/te/) => true irb> h.has_rkey?("foo") => false irb> h.has_rkey?(:foo) => false irb> h.has_rkey?(/foo/) => false