mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge pull request #2138 from take-cheeze/struct_to_a
Implement Struct#to_a and Struct#values .
This commit is contained in:
@@ -792,6 +792,19 @@ mrb_struct_len(mrb_state *mrb, mrb_value self)
|
||||
return mrb_fixnum_value(RSTRUCT_LEN(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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user