ruby-changes:23288
From: marcandre <ko1@a...>
Date: Mon, 16 Apr 2012 12:15:51 +0900 (JST)
Subject: [ruby-changes:23288] marcandRe: r35339 (trunk): * hash.c: Add Hash#to_h [Feature #6276]
marcandre 2012-04-16 12:15:42 +0900 (Mon, 16 Apr 2012) New Revision: 35339 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=35339 Log: * hash.c: Add Hash#to_h [Feature #6276] [rubyspec:84b7fe3f24d2] Modified files: trunk/NEWS trunk/hash.c Index: hash.c =================================================================== --- hash.c (revision 35338) +++ hash.c (revision 35339) @@ -1452,6 +1452,30 @@ return hash; } +/* + * call-seq: + * hsh.to_h -> hsh or new_hash + * + * Returns +self+. If called on a subclass of Hash, converts + * the receiver to a Hash object. + */ + +static VALUE +rb_hash_to_h(VALUE hash) +{ + if (rb_obj_class(hash) != rb_cHash) { + VALUE ret = rb_hash_new(); + if (!RHASH_EMPTY_P(hash)) + RHASH(ret)->ntbl = st_copy(RHASH(hash)->ntbl); + if (FL_TEST(hash, HASH_PROC_DEFAULT)) { + FL_SET(ret, HASH_PROC_DEFAULT); + } + RHASH_IFNONE(ret) = RHASH_IFNONE(hash); + return ret; + } + return hash; +} + static int keys_i(VALUE key, VALUE value, VALUE ary) { @@ -3333,6 +3357,7 @@ rb_define_method(rb_cHash,"rehash", rb_hash_rehash, 0); rb_define_method(rb_cHash,"to_hash", rb_hash_to_hash, 0); + rb_define_method(rb_cHash,"to_h", rb_hash_to_h, 0); rb_define_method(rb_cHash,"to_a", rb_hash_to_a, 0); rb_define_method(rb_cHash,"inspect", rb_hash_inspect, 0); rb_define_alias(rb_cHash, "to_s", "inspect"); Index: NEWS =================================================================== --- NEWS (revision 35338) +++ NEWS (revision 35339) @@ -22,6 +22,8 @@ * added Enumerable#lazy method for lazy enumeration. * Hash + * added method: + * added Hash#to_h as explicit conversion method, like Array#to_a. * extended method: * Hash#default_proc= can be passed nil to clear the default proc. -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/