add Hash#fetch; close #2134

This commit is contained in:
Yukihiro "Matz" Matsumoto
2014-04-27 03:03:27 +09:00
parent 855a3f5991
commit 7e175d8130
2 changed files with 26 additions and 0 deletions
+14
View File
@@ -13,4 +13,18 @@ class Hash
alias each_pair each
alias update merge!
def fetch(key, none=NONE, &block)
unless self.key?(key)
if block
block.call
elsif none != NONE
none
else
raise RuntimeError, "Key not found: #{key}"
end
else
self[key]
end
end
end
+12
View File
@@ -27,3 +27,15 @@ assert('Hash#values_at') do
h = Hash.new { |hash,k| hash[k] = k }
assert_equal keys, h.values_at(*keys)
end
assert('Hash#fetch') do
h = { "cat" => "feline", "dog" => "canine", "cow" => "bovine" }
assert_equal "feline", h.fetch("cat")
assert_equal "mickey", h.fetch("mouse", "mickey")
assert_equal "minny", h.fetch("mouse"){"minny"}
begin
h.fetch("gnu")
rescue => e
assert_kind_of(StandardError, e);
end
end