Class: Struct

Inherits:
Object show all
Includes:
Enumerable
Defined in:
struct.c

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 “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).

Class Method Summary collapse

Instance Method Summary collapse

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

#initializeObject



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">

Overloads:

  • .new([aString][, aSym]) ⇒ StructClass

    Returns:

    • (StructClass)
  • .new(arg, ...) ⇒ Object

    Returns:

  • .[](arg, ...) ⇒ Object

    Returns:



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

Returns:

  • (Boolean)


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"

Overloads:



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"

Overloads:



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

Yields:

  • (obj)


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

Yields:

  • (sym, obj)


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?).

Returns:

  • (Boolean)


833
834
835
# File 'struct.c', line 833

static VALUE
rb_struct_eql(s, s2)
VALUE s, s2;

#hashFixnum

Return a hash value based on this struct’s contents.

Returns:



809
810
811
# File 'struct.c', line 809

static VALUE
rb_struct_hash(s)
VALUE s;

#initialize_copyObject

:nodoc:



551
552
553
# File 'struct.c', line 551

static VALUE
rb_struct_init_copy(copy, s)
VALUE copy, s;

#to_sString #inspectString

Describe the contents of this struct in a string.

Overloads:



515
516
517
# File 'struct.c', line 515

static VALUE
rb_struct_inspect(s)
VALUE s;

#lengthFixnum #sizeFixnum

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

Overloads:



864
865
866
# File 'struct.c', line 864

static VALUE
rb_struct_size(s)
VALUE s;

#membersArray

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"]

Returns:



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]

Yields:

  • (i)

Returns:



744
745
746
# File 'struct.c', line 744

static VALUE
rb_struct_select(argc, argv, s)
int argc;

#lengthFixnum #sizeFixnum

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

Overloads:



864
865
866
# File 'struct.c', line 864

static VALUE
rb_struct_size(s)
VALUE s;

#to_aArray #valuesArray

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"

Overloads:



543
544
545
# File 'struct.c', line 543

static VALUE
rb_struct_to_a(s)
VALUE s;

#to_sString #inspectString

Describe the contents of this struct in a string.

Overloads:



515
516
517
# File 'struct.c', line 515

static VALUE
rb_struct_inspect(s)
VALUE s;

#to_aArray #valuesArray

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"

Overloads:



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 </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)

Returns:



721
722
723
# File 'struct.c', line 721

static VALUE
rb_struct_values_at(argc, argv, s)
int argc;