End of Life Ruby 3.0 has reached end of life and gets no more fixes. Switch to Ruby 4.0 →
instance method
Struct#to_h
struct.to_h → hash
struct.to_h {|name, value| block } → hash
struct.c
View on GitHub ↗
static VALUE
rb_struct_to_h(VALUE s)
{
VALUE h = rb_hash_new_with_size(RSTRUCT_LEN(s));
VALUE members = rb_struct_members(s);
long i;
int block_given = rb_block_given_p();
for (i=0; i<RSTRUCT_LEN(s); i++) {
VALUE k = rb_ary_entry(members, i), v = RSTRUCT_GET(s, i);
if (block_given)
rb_hash_set_pair(h, rb_yield_values(2, k, v));
else
rb_hash_aset(h, k, v);
}
return h;
}
Returns a Hash containing the names and values for the struct’s members.
If a block is given, the results of the block on each pair of the receiver will be used as pairs.
Example
Customer = Struct.new(:name, :address, :zip) joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345) joe.to_h[:address] #=> "123 Maple, Anytown NC" joe.to_h{|name, value| [name.upcase, value.to_s.upcase]}[:ADDRESS] #=> "123 MAPLE, ANYTOWN NC"