# class Rinda::Tuple

A tuple is the elementary object in `Rinda` programming. Tuples may be matched against templates if the tuple and the template are the same size.

### Public Class Methods

new(ary_or_hash) click to toggle source

Creates a new `Tuple` from `ary_or_hash` which must be an `Array` or `Hash`.

    # File lib/rinda/rinda.rb, line 51
    def initialize(ary_or_hash)
      if hash?(ary_or_hash)
        init_with_hash(ary_or_hash)
      else
        init_with_ary(ary_or_hash)
      end
    end

### Public Instance Methods

[](k) click to toggle source

Accessor method for elements of the tuple.

    # File lib/rinda/rinda.rb, line 69
    def [](k)
      @tuple[k]
    end

each() { |k, v| ... } click to toggle source

Iterate through the tuple, yielding the index or key, and the value, thus ensuring arrays are iterated similarly to hashes.

    # File lib/rinda/rinda.rb, line 84
    def each # FIXME
      if Hash === @tuple
        @tuple.each { |k, v| yield(k, v) }
      else
        @tuple.each_with_index { |v, k| yield(k, v) }
      end
    end

fetch(k) click to toggle source

Fetches item `k` from the tuple.

    # File lib/rinda/rinda.rb, line 76
    def fetch(k)
      @tuple.fetch(k)
    end

size() click to toggle source

The number of elements in the tuple.

    # File lib/rinda/rinda.rb, line 62
    def size
      @tuple.size
    end

value() click to toggle source

Return the tuple itself

    # File lib/rinda/rinda.rb, line 94
    def value
      @tuple
    end

### Private Instance Methods

hash?(ary_or_hash) click to toggle source

    # File lib/rinda/rinda.rb, line 100
    def hash?(ary_or_hash)
      ary_or_hash.respond_to?(:keys)
    end

init_with_ary(ary) click to toggle source

Munges `ary` into a valid `Tuple`.

    # File lib/rinda/rinda.rb, line 107
    def init_with_ary(ary)
      @tuple = Array.new(ary.size)
      @tuple.size.times do |i|
        @tuple[i] = ary[i]
      end
    end

init_with_hash(hash) click to toggle source

Ensures `hash` is a valid `Tuple`.

    # File lib/rinda/rinda.rb, line 117
    def init_with_hash(hash)
      @tuple = Hash.new
      hash.each do |k, v|
        raise InvalidHashTupleKey unless String === k
        @tuple[k] = v
      end
    end