1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

hash.c: to_proc

* hash.c (rb_hash_to_proc): new method Hash#to_proc.
  [Feature #11653]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52520 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2015-11-10 07:57:17 +00:00
parent 911b1c6b06
commit fbe967ec02
4 changed files with 29 additions and 0 deletions

View file

@ -1,3 +1,8 @@
Tue Nov 10 16:57:14 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
* hash.c (rb_hash_to_proc): new method Hash#to_proc.
[Feature #11653]
Tue Nov 10 14:34:09 2015 NARUSE, Yui <naruse@ruby-lang.org>
* time.c (rb_time_timespec_new): swap utc and localtime

1
NEWS
View file

@ -60,6 +60,7 @@ with all sufficient information, see the ChangeLog file.
* Hash#fetch_values [Feature #10017]
* Hash#dig [Feature #11643]
* Hash#<=, Hash#<, Hash#>=, Hash#> [Feature #10984]
* Hash#to_proc [Feature #11653]
* IO

13
hash.c
View file

@ -2766,6 +2766,18 @@ rb_hash_gt(VALUE hash, VALUE other)
return hash_le(other, hash);
}
static VALUE
hash_proc_call(VALUE key, VALUE hash, int argc, const VALUE *argv, VALUE passed_proc)
{
return rb_hash_aref(hash, key);
}
static VALUE
rb_hash_to_proc(VALUE hash)
{
return rb_proc_new(hash_proc_call, hash);
}
static int path_tainted = -1;
static char **origenviron;
@ -4132,6 +4144,7 @@ Init_Hash(void)
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");
rb_define_method(rb_cHash,"to_proc", rb_hash_to_proc, 0);
rb_define_method(rb_cHash,"==", rb_hash_equal, 1);
rb_define_method(rb_cHash,"[]", rb_hash_aref, 1);

View file

@ -1333,6 +1333,16 @@ class TestHash < Test::Unit::TestCase
assert_not_operator(h2, :>, h2)
end
def test_to_proc
h = {
1 => 10,
2 => 20,
3 => 30,
}
assert_equal([10, 20, 30], [1, 2, 3].map(&h))
end
class TestSubHash < TestHash
class SubHash < Hash
def reject(*)