[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]