On this page
Maintenance Ruby 3.4 gets fixes, but no new features. Switch to Ruby 4.0 →
Struct
Class Struct provides a convenient way to create a simple class that can store and fetch values.
This example creates a subclass of Struct, Struct::Customer; the first argument, a string, is the name of the subclass; the other arguments, symbols, determine the members of the new subclass.
Customer = Struct.new('Customer', :name, :address, :zip) Customer.name # => "Struct::Customer" Customer.class # => Class Customer.superclass # => Struct
Corresponding to each member are two methods, a writer and a reader, that store and fetch values:
methods = Customer.instance_methods false methods # => [:zip, :address=, :zip=, :address, :name, :name=]
An instance of the subclass may be created, and its members assigned values, via method ::new:
joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345) joe # => #<struct Struct::Customer name="Joe Smith", address="123 Maple, Anytown NC", zip=12345>
The member values may be managed thus:
joe.name # => "Joe Smith" joe.name = 'Joseph Smith' joe.name # => "Joseph Smith"
And thus; note that member name may be expressed as either a string or a symbol:
joe[:name] # => "Joseph Smith" joe[:name] = 'Joseph Smith, Jr.' joe['name'] # => "Joseph Smith, Jr."
See Struct::new.
What’s Here
First, what’s elsewhere. Class Struct:
-
Inherits from class Object.
-
Includes module Enumerable, which provides dozens of additional methods.
See also Data, which is a somewhat similar, but stricter concept for defining immutable value objects.
Here, class Struct provides methods that are useful for:
Methods for Creating a Struct Subclass
-
::new: Returns a new subclass of Struct.
Methods for Querying
Methods for Comparing
-
==: Returns whether a given object is equal toself, using==to compare member values. -
eql?: Returns whether a given object is equal toself, usingeql?to compare member values.
Methods for Fetching
-
[]: Returns the value associated with a given member name. -
to_a(aliased asvalues,deconstruct): Returns the member values inselfas an array. -
deconstruct_keys: Returns a hash of the name/value pairs for given member names. -
dig: Returns the object in nested objects that is specified by a given member name and additional arguments. -
members: Returns an array of the member names. -
select(aliased asfilter): Returns an array of member values fromself, as selected by the given block. -
values_at: Returns an array containing values for given member names.
Methods for Assigning
-
[]=: Assigns a given value to a given member name.
Methods for Iterating
-
each: Calls a given block with each member name. -
each_pair: Calls a given block with each member name/value pair.
Methods for Converting
Class methods 4
Instance methods 23
Ruby version changes 3
-
3.2
-
A
Structclass can also be initialized with keyword arguments withoutkeyword_init: trueonStruct.new[Feature #16806]ExamplePost = Struct.new(:id, :name) Post.new(1, "hello") #=> #<struct Post id=1, name="hello"> # From Ruby 3.2, the following code also works without keyword_init: true. Post.new(id: 1, name: "hello") #=> #<struct Post id=1, name="hello">
-
-
3.1
-
Passing only keyword arguments to Struct#initialize is warned. You need to use a
Hashliteral to set aHashto a first member. [Feature #16806] -
StructClass#keyword_init? is added [Feature #18008]
-