diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-04-28 05:52:37 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-04-28 05:52:37 +0900 |
| commit | e1f4e021dea13102496b5c8a669a8a2e670f12f1 (patch) | |
| tree | c9e64357c421f432b26a1b9a52697901b286f487 /mrbgems | |
| parent | bbc237044d0fb1792dff8c5d2466f4e644821239 (diff) | |
| parent | e2f6a905bccb268e6b85650e17d416f41624200f (diff) | |
| download | mruby-e1f4e021dea13102496b5c8a669a8a2e670f12f1.tar.gz mruby-e1f4e021dea13102496b5c8a669a8a2e670f12f1.zip | |
Merge pull request #2138 from take-cheeze/struct_to_a
Implement Struct#to_a and Struct#values .
Diffstat (limited to 'mrbgems')
| -rw-r--r-- | mrbgems/mruby-struct/src/struct.c | 15 | ||||
| -rw-r--r-- | mrbgems/mruby-struct/test/struct.rb | 6 |
2 files changed, 21 insertions, 0 deletions
diff --git a/mrbgems/mruby-struct/src/struct.c b/mrbgems/mruby-struct/src/struct.c index 43cacbc4e..121226717 100644 --- a/mrbgems/mruby-struct/src/struct.c +++ b/mrbgems/mruby-struct/src/struct.c @@ -793,6 +793,19 @@ mrb_struct_len(mrb_state *mrb, mrb_value self) } /* + * call-seq: + * struct.to_a -> array + * struct.values -> array + * + * Create an array from struct values. + */ +static mrb_value +mrb_struct_to_a(mrb_state *mrb, mrb_value self) +{ + return mrb_ary_new_from_values(mrb, RSTRUCT_LEN(self), RSTRUCT_PTR(self)); +} + +/* * A <code>Struct</code> is a convenient way to bundle a number of * attributes together, using accessor methods, without having to write * an explicit class. @@ -827,6 +840,8 @@ mrb_mruby_struct_gem_init(mrb_state* mrb) mrb_define_method(mrb, st, "size", mrb_struct_len, MRB_ARGS_NONE()); mrb_define_method(mrb, st, "length", mrb_struct_len, MRB_ARGS_NONE()); + mrb_define_method(mrb, st, "to_a", mrb_struct_to_a, MRB_ARGS_NONE()); + mrb_define_method(mrb, st, "values", mrb_struct_to_a, MRB_ARGS_NONE()); } void diff --git a/mrbgems/mruby-struct/test/struct.rb b/mrbgems/mruby-struct/test/struct.rb index a250b0ac6..01e3076a5 100644 --- a/mrbgems/mruby-struct/test/struct.rb +++ b/mrbgems/mruby-struct/test/struct.rb @@ -112,3 +112,9 @@ assert('Struct#length, Struct#size') do assert_equal 2, s.size assert_equal 2, s.length end + +assert('Struct#to_a, Struct#values') do + s = Struct.new(:mem1, :mem2).new('a', 'b') + assert_equal ['a', 'b'], s.to_a + assert_equal ['a', 'b'], s.values +end |
