- Inheritance
- < Object
- Included Modules
- Enumerable
A Struct is a convenient way to bundle a number of attributes together, using accessor methods, without having to write an explicit class.
The Struct class is a generator of specific classes, each one of which is defined to hold a set of variables and their accessors. In these examples, we‘ll call the generated class ``CustomerClass,’’ and we‘ll show an example instance of that class as ``CustomerInst.’‘
In the descriptions that follow, the parameter symbol refers to a symbol, which is either a quoted string or a Symbol (such as :name).
Methods
Class
Visibility | Signature |
---|---|
public | new (...) |
public | new (...) |
public | yaml_new ( klass, tag, val ) |
public | yaml_tag_class_name () |
public | yaml_tag_read_class ( name ) |
Instance
Visibility | Signature |
---|---|
public | == (p1) |
public | [] (p1) |
public | []= (p1, p2) |
public | each () |
public | each_pair () |
public | eql? (p1) |
public | hash () |
public | inspect () |
public | length () |
public | members () |
public | pretty_print (q) |
public | pretty_print_cycle (q) |
public | select (...) |
public | size () |
public | to_a () |
public | to_s () |
public | to_yaml ( opts = {} ) |
public | values () |
public | values_at (...) |
Class Method Detail
Struct.new( [aString] [, aSym]+> ) => StructClass
StructClass.new(arg, ...) => obj
StructClass[arg, ...] => obj
Creates a new class, named by aString, containing accessor methods for the given symbols. If the name aString is omitted, an anonymous structure class will be created. Otherwise, the name of this struct will appear as a constant in class Struct, so it must be unique for all Structs in the system and should start with a capital letter. Assigning a structure class to a constant effectively gives the class the name of the constant.
Struct::new returns a new Class object, which can then be used to create specific instances of the new structure. The number of actual parameters must be less than or equal to the number of attributes defined for this class; unset parameters default to \nil{}. Passing too many parameters will raise an \E{ArgumentError}.
The remaining methods listed in this section (class and instance) are defined for this generated class.
# Create a structure with a name in Struct Struct.new("Customer", :name, :address) #=> Struct::Customer Struct::Customer.new("Dave", "123 Main") #=> #<Struct::Customer name="Dave", address="123 Main"> # Create a structure named by its constant Customer = Struct.new(:name, :address) #=> Customer Customer.new("Dave", "123 Main") #=> #<Customer name="Dave", address="123 Main">
new(...)
yaml_new( klass, tag, val )
yaml_tag_class_name()
yaml_tag_read_class( name )
Instance Method Detail
struct == other_struct => true or false
Equality—Returns true if other_struct is equal to this one: they must be of the same class as generated by Struct::new, and the values of all instance variables must be equal (according to Object#==).
Customer = Struct.new(:name, :address, :zip) joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345) joejr = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345) jane = Customer.new("Jane Doe", "456 Elm, Anytown NC", 12345) joe == joejr #=> true joe == jane #=> false
struct[symbol] => anObject
struct[fixnum] => anObject
Attribute Reference—Returns the value of the instance variable named by symbol, or indexed (0..length-1) by fixnum. Will raise NameError if the named variable does not exist, or IndexError if the index is out of range.
Customer = Struct.new(:name, :address, :zip) joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345) joe["name"] #=> "Joe Smith" joe[:name] #=> "Joe Smith" joe[0] #=> "Joe Smith"
struct[symbol] = obj => obj
struct[fixnum] = obj => obj
Attribute Assignment—Assigns to the instance variable named by symbol or fixnum the value obj and returns it. Will raise a NameError if the named variable does not exist, or an IndexError if the index is out of range.
Customer = Struct.new(:name, :address, :zip) joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345) joe["name"] = "Luke" joe[:zip] = "90210" joe.name #=> "Luke" joe.zip #=> "90210"
struct.each {|obj| block } => struct
Calls block once for each instance variable, passing the value as a parameter.
Customer = Struct.new(:name, :address, :zip) joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345) joe.each {|x| puts(x) }
produces:
Joe Smith 123 Maple, Anytown NC 12345
struct.each_pair {|sym, obj| block } => struct
Calls block once for each instance variable, passing the name (as a symbol) and the value as parameters.
Customer = Struct.new(:name, :address, :zip) joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345) joe.each_pair {|name, value| puts("#{name} => #{value}") }
produces:
name => Joe Smith address => 123 Maple, Anytown NC zip => 12345
eql?(p1)
code-seq:
struct.eql?(other) => true or false
Two structures are equal if they are the same object, or if all their fields are equal (using eql?).
struct.hash => fixnum
Return a hash value based on this struct‘s contents.
struct.to_s => string
struct.inspect => string
Describe the contents of this struct in a string.
struct.length => fixnum
struct.size => fixnum
Returns the number of instance variables.
Customer = Struct.new(:name, :address, :zip) joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345) joe.length #=> 3
struct.members => array
Returns an array of strings representing the names of the instance variables.
Customer = Struct.new(:name, :address, :zip) joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345) joe.members #=> ["name", "address", "zip"]
pretty_print(q)
pretty_print_cycle(q)
struct.select {|i| block } => array
Invokes the block passing in successive elements from struct, returning an array containing those elements for which the block returns a true value (equivalent to Enumerable#select).
Lots = Struct.new(:a, :b, :c, :d, :e, :f) l = Lots.new(11, 22, 33, 44, 55, 66) l.select {|v| (v % 2).zero? } #=> [22, 44, 66]
struct.length => fixnum
struct.size => fixnum
Returns the number of instance variables.
Customer = Struct.new(:name, :address, :zip) joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345) joe.length #=> 3
struct.to_a => array
struct.values => array
Returns the values for this instance as an array.
Customer = Struct.new(:name, :address, :zip) joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345) joe.to_a[1] #=> "123 Maple, Anytown NC"
struct.to_s => string
struct.inspect => string
Describe the contents of this struct in a string.
to_yaml( opts = {} )
struct.to_a => array
struct.values => array
Returns the values for this instance as an array.
Customer = Struct.new(:name, :address, :zip) joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345) joe.to_a[1] #=> "123 Maple, Anytown NC"
struct.values_at(selector,... ) => an_array
Returns an array containing the elements in self corresponding to the given selector(s). The selectors may be either integer indices or ranges. See also </code>.select<code>.
a = %w{ a b c d e f } a.values_at(1, 3, 5) a.values_at(1, 3, 5, 7) a.values_at(-1, -3, -5, -7) a.values_at(1..3, 2...5)