Class: Struct
Overview
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
<i>Customer</i>Class,'' and we'll show an example instance of that class as <i>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).
Class Method Summary collapse
-
.new ⇒ Object
Creates a new class, named by aString, containing accessor methods for the given symbols.
Instance Method Summary collapse
-
#==(other_struct) ⇒ Boolean
Equality---Returns
trueif other_struct is equal to this one: they must be of the same class as generated byStruct::new, and the values of all instance variables must be equal (according toObject#==). -
#[] ⇒ Object
Attribute Reference---Returns the value of the instance variable named by symbol, or indexed (0..length-1) by fixnum.
-
#[]= ⇒ Object
Attribute Assignment---Assigns to the instance variable named by symbol or fixnum the value obj and returns it.
-
#each {|obj| ... } ⇒ Object
Calls block once for each instance variable, passing the value as a parameter.
-
#each_pair {|sym, obj| ... } ⇒ Object
Calls block once for each instance variable, passing the name (as a symbol) and the value as parameters.
-
#eql? ⇒ Boolean
code-seq: struct.eql?(other) => true or false.
-
#hash ⇒ Fixnum
Return a hash value based on this struct's contents.
- #initialize ⇒ Object constructor
-
#initialize_copy ⇒ Object
:nodoc:.
-
#inspect ⇒ Object
Describe the contents of this struct in a string.
-
#length ⇒ Object
Returns the number of instance variables.
-
#members ⇒ Array
Returns an array of strings representing the names of the instance variables.
-
#select {|i| ... } ⇒ 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). -
#size ⇒ Object
Returns the number of instance variables.
-
#to_a ⇒ Object
Returns the values for this instance as an array.
-
#to_s ⇒ Object
Describe the contents of this struct in a string.
-
#values ⇒ Object
Returns the values for this instance as an array.
-
#values_at(selector, ...) ⇒ Array
Returns an array containing the elements in self corresponding to the given selector(s).
Methods included from Enumerable
#all?, #any?, #collect, #count, #cycle, #detect, #drop, #drop_while, #each_cons, #each_slice, #each_with_index, #entries, #enum_cons, #enum_slice, #enum_with_index, #find, #find_all, #find_index, #first, #grep, #group_by, #include?, #inject, #map, #max, #max_by, #member?, #min, #min_by, #minmax, #minmax_by, #none?, #one?, #partition, #reduce, #reject, #reverse_each, #sort, #sort_by, #take, #take_while, #zip
Constructor Details
#initialize ⇒ Object
332 333 334 |
# File 'struct.c', line 332 static VALUE rb_struct_initialize(self, values) VALUE self, values; |
Class Method Details
.new([aString][, aSym]) ⇒ StructClass .new(arg, ...) ⇒ Object .[](arg, ...) ⇒ Object
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 \EArgumentError.
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">
301 302 303 |
# File 'struct.c', line 301 static VALUE rb_struct_s_def(argc, argv, klass) int argc; |
Instance Method Details
#==(other_struct) ⇒ Boolean
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
783 784 785 |
# File 'struct.c', line 783 static VALUE rb_struct_equal(s, s2) VALUE s, s2; |
#[](symbol) ⇒ Object #[](fixnum) ⇒ Object
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"
606 607 608 |
# File 'struct.c', line 606 VALUE rb_struct_aref(s, idx) VALUE s, idx; |
#[]=(symbol) ⇒ Object #[]=(fixnum) ⇒ Object
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"
672 673 674 |
# File 'struct.c', line 672 VALUE rb_struct_aset(s, idx, val) VALUE s, idx, val; |
#each {|obj| ... } ⇒ Object
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
423 424 425 |
# File 'struct.c', line 423 static VALUE rb_struct_each(s) VALUE s; |
#each_pair {|sym, obj| ... } ⇒ Object
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
454 455 456 |
# File 'struct.c', line 454 static VALUE rb_struct_each_pair(s) VALUE s; |
#eql? ⇒ Boolean
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?).
833 834 835 |
# File 'struct.c', line 833 static VALUE rb_struct_eql(s, s2) VALUE s, s2; |
#hash ⇒ Fixnum
Return a hash value based on this struct's contents.
809 810 811 |
# File 'struct.c', line 809 static VALUE rb_struct_hash(s) VALUE s; |
#initialize_copy ⇒ Object
:nodoc:
551 552 553 |
# File 'struct.c', line 551 static VALUE rb_struct_init_copy(copy, s) VALUE copy, s; |
#to_s ⇒ String #inspect ⇒ String
Describe the contents of this struct in a string.
515 516 517 |
# File 'struct.c', line 515 static VALUE rb_struct_inspect(s) VALUE s; |
#length ⇒ Fixnum #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
864 865 866 |
# File 'struct.c', line 864 static VALUE rb_struct_size(s) VALUE s; |
#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"]
95 96 97 |
# File 'struct.c', line 95 static VALUE rb_struct_members_m(obj) VALUE obj; |
#select {|i| ... } ⇒ 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]
744 745 746 |
# File 'struct.c', line 744 static VALUE rb_struct_select(argc, argv, s) int argc; |
#length ⇒ Fixnum #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
864 865 866 |
# File 'struct.c', line 864 static VALUE rb_struct_size(s) VALUE s; |
#to_a ⇒ Array #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"
543 544 545 |
# File 'struct.c', line 543 static VALUE rb_struct_to_a(s) VALUE s; |
#to_s ⇒ String #inspect ⇒ String
Describe the contents of this struct in a string.
515 516 517 |
# File 'struct.c', line 515 static VALUE rb_struct_inspect(s) VALUE s; |
#to_a ⇒ Array #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"
543 544 545 |
# File 'struct.c', line 543 static VALUE rb_struct_to_a(s) VALUE s; |
#values_at(selector, ...) ⇒ 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 .select.
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)
721 722 723 |
# File 'struct.c', line 721 static VALUE rb_struct_values_at(argc, argv, s) int argc; |