Project

General

Profile

Feature #10017 » values_at_bang.patch

wojtekmach (Wojtek Mach), 07/08/2014 10:35 PM

View differences:

hash.c
return result;
}
/*
* call-seq:
* hsh.values_at!(key, ...) -> array
* hsh.values_at!(key, ...) { |key| block } -> array
*
* Return an array containing the values associated with the given keys
* but also raises an <code>KeyError</code> when one of keys can't be found.
* Also see <code>Hash#values_at</code> and <code>Hash#fetch</code>.
*
* h = { "cat" => "feline", "dog" => "canine", "cow" => "bovine" }
*
* h.values_at!("cow", "cat") #=> ["bovine", "feline"]
* h.values_at!("cow", "bird") # raises KeyError
* h.values_at!("cow", "bird") { |k| k.upcase } #=> ["bovine", "BIRD"]
*/
VALUE
rb_hash_values_at_bang(int argc, VALUE *argv, VALUE hash)
{
VALUE result = rb_ary_new2(argc);
long i;
for (i=0; i<argc; i++) {
rb_ary_push(result, rb_hash_fetch(hash, argv[i]));
}
return result;
}
static int
select_i(VALUE key, VALUE value, VALUE result)
{
......
rb_define_method(rb_cHash,"keys", rb_hash_keys, 0);
rb_define_method(rb_cHash,"values", rb_hash_values, 0);
rb_define_method(rb_cHash,"values_at", rb_hash_values_at, -1);
rb_define_method(rb_cHash,"values_at!", rb_hash_values_at_bang, -1);
rb_define_method(rb_cHash,"shift", rb_hash_shift, 0);
rb_define_method(rb_cHash,"delete", rb_hash_delete, 1);
(1-1/2)