Preview Ruby 4.1 is a preview. It can change before the final release. Switch to Ruby 4.0 →
instance method
Struct#to_h
() -> ::Hash[::Symbol, E]
[K, V] () { (::Symbol key, E value) -> [ K, V ] } -> ::Hash[K, V]
to_h → hash
to_h {|name, value| ... } → hash
struct.c
View on GitHub ↗
static VALUE
rb_struct_to_h(VALUE s)
{
VALUE h = rb_hash_new_capa(RSTRUCT_LEN_RAW(s));
VALUE members = rb_struct_members(s);
rb_len_t i;
int block_given = rb_block_given_p();
for (i=0; i<RSTRUCT_LEN_RAW(s); i++) {
VALUE k = rb_ary_entry(members, i), v = RSTRUCT_GET_RAW(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 name and value for each member:
Example
Customer = Struct.new(:name, :address, :zip) joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345) h = joe.to_h h # => {name: "Joe Smith", address: "123 Maple, Anytown NC", zip: 12345}
If a block is given, it is called with each name/value pair; the block should return a 2-element array whose elements will become a key/value pair in the returned hash:
Example
h = joe.to_h{|name, value| [name.upcase, value.to_s.upcase]} h # => {NAME: "JOE SMITH", ADDRESS: "123 MAPLE, ANYTOWN NC", ZIP: "12345"}
Raises ArgumentError if the block returns an inappropriate value.