/* * call-seq: * Hash[ [key =>|, value]* ] => hash * * Creates a new hash populated with the given objects. Equivalent to * the literal <code>{ <i>key</i>, <i>value</i>, ... }</code>. Keys and * values occur in pairs, so there must be an even number of arguments. * * Hash["a", 100, "b", 200] #=> {"a"=>100, "b"=>200} * Hash["a" => 100, "b" => 200] #=> {"a"=>100, "b"=>200} * { "a" => 100, "b" => 200 } #=> {"a"=>100, "b"=>200} */ static VALUE rb_hash_s_create(argc, argv, klass) int argc; VALUE *argv; VALUE klass; { VALUE hash; int i; if (argc == 1 && TYPE(argv[0]) == T_HASH) { hash = hash_alloc0(klass); RHASH(hash)->tbl = st_copy(RHASH(argv[0])->tbl); return hash; } if (argc % 2 != 0) { rb_raise(rb_eArgError, "odd number of arguments for Hash"); } hash = hash_alloc(klass); for (i=0; i<argc; i+=2) { rb_hash_aset(hash, argv[i], argv[i + 1]); } return hash; }