Programming Ruby
The Pragmatic Programmer's Guide
class Struct
Parent:
Object
Version:
1.6
Index:
new
new
members
==
[ ]
[ ]=
each
length
members
size
to_a
values
Subclasses: Struct::Tms
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
aSymbol refers to a symbol, which is either a
quoted string or a
Symbol (such as
:name).
mixins
Enumerable:
collect, detect, each_with_index, entries, find, find_all, grep,
include?, map, max, member?, min, reject, select, sort, to_a
class methods
new
Struct.new(
[
aString
] [,
aSym
]+
)
->
CustomerClass
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.
Struct.new
returns a new
Class object, which can then be used
to create specific instances of the new structure.
The remaining methods listed below (class and instance) are
defined for this generated class. See the description that follows
for an example.
new
CustomerClass.new(
[
anObject
]+
)
->
CustomerInst
Creates a new instance. 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
ArgumentError.
Customer = Struct.new( "Customer", :name, :address, :zip )
joe = Customer.new( "Joe Smith", "123 Maple, Anytown NC", 12345 )
joe.name
サ
"Joe Smith"
joe.zip
サ
12345
members
CustomerClass.members
->
anArray
Returns an array of strings representing the names of the
instance variables.
Customer = Struct.new( "Customer", :name, :address, :zip )
Customer.members
サ
["name", "address", "zip"]
instance methods
==
CustomerInst ==
anOtherStruct
->
true or
false
Equality---Returns
true if
anOtherStruct 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( "Customer", :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
[ ]
CustomerInst[
aSymbol ] ->
anObject
CustomerInst[
anInteger ] ->
anObject
Attribute Reference---Returns the value of the instance variable
named by
aSymbol, or indexed (0..length-1) by
anInteger. Will raise
NameError if the named
variable does not exist, or
IndexError if the index is out of range.
Customer = Struct.new( "Customer", :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"
[ ]=
CustomerInst[
aSymbol ] =
anObject ->
anObject
CustomerInst[
anInteger ] =
anObject ->
anObject
Attribute Assignment---Assigns to the instance variable named by
aSymbol or
anInteger
the value
anObject 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( "Customer", :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"
each
CustomerInst.each {| anObject | block }
->
CustomerInst
Calls
block once for each instance variable, passing the
value as a parameter.
Customer = Struct.new( "Customer", :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
length
CustomerInst.length
->
anInteger
Returns the number of instance variables.
Customer = Struct.new( "Customer", :name, :address, :zip )
joe = Customer.new( "Joe Smith", "123 Maple, Anytown NC", 12345 )
joe.length
サ
3
members
CustomerInst.members
->
anArray
Returns an array of strings representing the names of the
instance variables.
Customer = Struct.new( "Customer", :name, :address, :zip )
joe = Customer.new( "Joe Smith", "123 Maple, Anytown NC", 12345 )
joe.members
サ
["name", "address", "zip"]
size
CustomerInst.size
->
anInteger
Synonym for
Struct#length
.
to_a
CustomerInst.to_a
->
anArray
Returns the values for this instance as an array.
Customer = Struct.new( "Customer", :name, :address, :zip )
joe = Customer.new( "Joe Smith", "123 Maple, Anytown NC", 12345 )
joe.to_a[1]
サ
"123 Maple, Anytown NC"
values
CustomerInst.values
->
anArray
Synonym for
to_a.
Extracted from the book "Programming Ruby -
The Pragmatic Programmer's Guide"
Copyright
©
2001 by Addison Wesley Longman, Inc. This material may
be distributed only subject to the terms and conditions set forth in
the Open Publication License, v1.0 or later (the latest version is
presently available at
http://www.opencontent.org/openpub/)).
Distribution of substantively modified versions of this document is
prohibited without the explicit permission of the copyright holder.
Distribution of the work or derivative of the work in any standard
(paper) book form is prohibited unless prior permission is obtained
from the copyright holder.