зеркало из https://github.com/github/ruby.git
struct.c: yield assoc in each_pair
* struct.c (rb_struct_each_pair): yield associated pairs so that an unsplat argument can get both, for consistency with Hash, OpenStruct, and etc. [ruby-dev:46533] [Bug #7382] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37721 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
2370556d3d
Коммит
7588c674d5
|
@ -1,3 +1,9 @@
|
|||
Mon Nov 19 16:30:59 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* struct.c (rb_struct_each_pair): yield associated pairs so that
|
||||
an unsplat argument can get both, for consistency with Hash,
|
||||
OpenStruct, and etc. [ruby-dev:46533] [Bug #7382]
|
||||
|
||||
Mon Nov 19 16:17:53 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* configure.in (LIBS): libelf is need on only FreeBSD.
|
||||
|
|
4
struct.c
4
struct.c
|
@ -495,7 +495,9 @@ rb_struct_each_pair(VALUE s)
|
|||
RETURN_SIZED_ENUMERATOR(s, 0, 0, rb_struct_size);
|
||||
members = rb_struct_members(s);
|
||||
for (i=0; i<RSTRUCT_LEN(s); i++) {
|
||||
rb_yield_values(2, rb_ary_entry(members, i), RSTRUCT_PTR(s)[i]);
|
||||
VALUE key = rb_ary_entry(members, i);
|
||||
VALUE value = RSTRUCT_PTR(s)[i];
|
||||
rb_yield(rb_assoc_new(key, vlaue));
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
# -*- coding: us-ascii -*-
|
||||
require 'test/unit'
|
||||
require 'timeout'
|
||||
require_relative 'envutil'
|
||||
|
@ -117,6 +118,10 @@ class TestStruct < Test::Unit::TestCase
|
|||
klass = Struct.new(:a, :b)
|
||||
o = klass.new(1, 2)
|
||||
assert_equal([[:a, 1], [:b, 2]], o.each_pair.to_a)
|
||||
bug7382 = '[ruby-dev:46533]'
|
||||
a = []
|
||||
o.each_pair {|x| a << x}
|
||||
assert_equal([[:a, 1], [:b, 2]], a, bug7382)
|
||||
end
|
||||
|
||||
def test_inspect
|
||||
|
|
Загрузка…
Ссылка в новой задаче