Feature #19261 » data-and-struct-remove-members-method.patch
struct.c | ||
---|---|---|
return rb_ary_dup(members);
|
||
}
|
||
/*
|
||
* call-seq:
|
||
* members -> array_of_symbols
|
||
*
|
||
* Returns the member names from +self+ as an array:
|
||
*
|
||
* Customer = Struct.new(:name, :address, :zip)
|
||
* Customer.new.members # => [:name, :address, :zip]
|
||
*
|
||
* Related: #to_a.
|
||
*/
|
||
static VALUE
|
||
rb_struct_members_m(VALUE obj)
|
||
{
|
||
return rb_struct_s_members_m(rb_obj_class(obj));
|
||
}
|
||
VALUE
|
||
rb_struct_getmember(VALUE obj, ID id)
|
||
{
|
||
... | ... | |
#define rb_data_s_members_m rb_struct_s_members_m
|
||
/*
|
||
* call-seq:
|
||
* new(*args) -> instance
|
||
... | ... | |
#define rb_data_to_h rb_struct_to_h
|
||
/*
|
||
* call-seq:
|
||
* members -> array_of_symbols
|
||
*
|
||
* Returns the member names from +self+ as an array:
|
||
*
|
||
* Measure = Data.define(:amount, :unit)
|
||
* distance = Measure[10, 'km']
|
||
*
|
||
* distance.members #=> [:amount, :unit]
|
||
*
|
||
*/
|
||
#define rb_data_members_m rb_struct_members_m
|
||
/*
|
||
* call-seq:
|
||
* deconstruct -> array
|
||
... | ... | |
rb_define_method(rb_cStruct, "filter", rb_struct_select, -1);
|
||
rb_define_method(rb_cStruct, "values_at", rb_struct_values_at, -1);
|
||
rb_define_method(rb_cStruct, "members", rb_struct_members_m, 0);
|
||
rb_define_method(rb_cStruct, "dig", rb_struct_dig, -1);
|
||
rb_define_method(rb_cStruct, "deconstruct", rb_struct_to_a, 0);
|
||
... | ... | |
rb_define_method(rb_cData, "inspect", rb_data_inspect, 0);
|
||
rb_define_alias(rb_cData, "to_s", "inspect");
|
||
rb_define_method(rb_cData, "to_h", rb_data_to_h, 0);
|
||
rb_define_method(rb_cData, "members", rb_data_members_m, 0);
|
||
rb_define_method(rb_cData, "to_h", rb_data_to_h, 0);
|
||
rb_define_method(rb_cData, "deconstruct", rb_data_deconstruct, 0);
|
||
rb_define_method(rb_cData, "deconstruct_keys", rb_data_deconstruct_keys, 1);
|
test/ruby/test_data.rb | ||
---|---|---|
test = klass.new(1, 2)
|
||
assert_equal(1, test.foo)
|
||
assert_equal(2, test.bar)
|
||
assert_equal(%i[foo bar], test.members)
|
||
assert_equal(1, test.public_send(:foo))
|
||
assert_equal(0, test.method(:foo).arity)
|
||
assert_equal([], test.method(:foo).parameters)
|
||
... | ... | |
assert_not_equal(Data.define.new, test)
|
||
assert_equal('#<data >', test.inspect)
|
||
assert_equal([], test.members)
|
||
assert_equal({}, test.to_h)
|
||
end
|
||
test/ruby/test_struct.rb | ||
---|---|---|
def test_members
|
||
klass = @Struct.new(:a)
|
||
o = klass.new(1)
|
||
assert_equal([:a], klass.members)
|
||
assert_equal([:a], o.members)
|
||
assert_equal([:a], klass.members)
|
||
end
|
||
def test_ref
|
||
... | ... | |
assert_nothing_raised { @Struct.new(:a) { } }
|
||
assert_raise(RuntimeError) { @Struct.new(:a) { raise } }
|
||
assert_equal([:utime, :stime, :cutime, :cstime], Process.times.members)
|
||
assert_equal([:utime, :stime, :cutime, :cstime], Process.times.class.members)
|
||
end
|
||
def test_struct_new_with_hash
|
- « Previous
- 1
- 2
- Next »