On this page
End of Life Ruby 3.1 has reached end of life and gets no more fixes. 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.
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 to
self, using==to compare member values. eql?-
Returns whether a given object is equal to
self, usingeql?to compare member values.
Methods for Fetching
[]-
Returns the value associated with a given member name.
to_a,values,deconstruct-
Returns the member values in
selfas 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,filter-
Returns an array of member values from
self, 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
Group is a Struct that is only available when compiled with HAVE_GETGRENT.
The struct contains the following members:
- name
-
contains the name of the group as a
String. - passwd
-
contains the encrypted password as a
String. An ‘x’ is returned if password access to the group is not available; an empty string is returned if no password is needed to obtain membership of the group.Must be compiled with
HAVE_STRUCT_GROUP_GR_PASSWD. - gid
-
contains the group’s numeric ID as an integer.
- mem
-
is an
Arrayof Strings containing the short login names of the members of the group.
Passwd is a Struct that contains the following members:
- name
-
contains the short login name of the user as a
String. - passwd
-
contains the encrypted password of the user as a
String. an ‘x’ is returned if shadow passwords are in use. An ‘*’ is returned if the user cannot log in using a password. - uid
-
contains the integer user ID (uid) of the user.
- gid
-
contains the integer group ID (gid) of the user’s primary group.
- dir
-
contains the path to the home directory of the user as a
String. - shell
-
contains the path to the login shell of the user as a
String.
The following members below are optional, and must be compiled with special flags:
- gecos
-
contains a longer
Stringdescription of the user, such as a full name. Some Unix systems provide structured information in the gecos field, but this is system-dependent. must be compiled withHAVE_STRUCT_PASSWD_PW_GECOS - change
-
password change time(integer) must be compiled with
HAVE_STRUCT_PASSWD_PW_CHANGE - quota
-
quota value(integer) must be compiled with
HAVE_STRUCT_PASSWD_PW_QUOTA - age
-
password age(integer) must be compiled with
HAVE_STRUCT_PASSWD_PW_AGE - class
-
user access class(string) must be compiled with
HAVE_STRUCT_PASSWD_PW_CLASS - comment
-
comment(string) must be compiled with
HAVE_STRUCT_PASSWD_PW_COMMENT - expire
-
account expiration time(integer) must be compiled with
HAVE_STRUCT_PASSWD_PW_EXPIRE
Ruby version changes 2
-
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]
-