Ruby Newbie homepage Ruby Newbie homepage

How to use

Quick guide

Official content
Merges each of other_hashes into self; returns self.
Each argument in other_hashes must be a Hash.
Method update is an alias for #merge!.
With arguments and no block:
  • Returns self, after the given hashes are merged into it.
  • The given hashes are merged left to right.
  • Each new entry is added at the end.
  • Each duplicate-key entry's value overwrites the previous value.
Example:
h = {foo: 0, bar: 1, baz: 2}
h1 = {bat: 3, bar: 4}
h2 = {bam: 5, bat:6}
h.merge!(h1, h2) # => {:foo=>0, :bar=>4, :baz=>2, :bat=>6, :bam=>5}
With arguments and a block:
  • Returns self, after the given hashes are merged.
  • The given hashes are merged left to right.
  • Each new-key entry is added at the end.
  • For each duplicate key:
    • Calls the block with the key and the old and new values.
    • The block's return value becomes the new value for the entry.
Example:
h = {foo: 0, bar: 1, baz: 2}
h1 = {bat: 3, bar: 4}
h2 = {bam: 5, bat:6}
h3 = h.merge!(h1, h2) { |key, old_value, new_value| old_value + new_value }
h3 # => {:foo=>0, :bar=>5, :baz=>2, :bat=>9, :bam=>5}
With no arguments:
  • Returns self, unmodified.
  • The block, if given, is ignored.
Example:
h = {foo: 0, bar: 1, baz: 2}
h.merge # => {:foo=>0, :bar=>1, :baz=>2}
h1 = h.merge! { |key, old_value, new_value| raise 'Cannot happen' }
h1 # => {:foo=>0, :bar=>1, :baz=>2}
 
               static VALUE
rb_hash_update(int argc, VALUE *argv, VALUE self)
{
    int i;
    bool block_given = rb_block_given_p();

    rb_hash_modify(self);
    for (i = 0; i < argc; i++){
        VALUE hash = to_hash(argv[i]);
        if (block_given) {
            rb_hash_foreach(hash, rb_hash_update_block_i, self);
        }
        else {
            rb_hash_foreach(hash, rb_hash_update_i, self);
        }
    }
    return self;
}
            

Was this page useful?