Sha256: 1b4c5ef5211a4771df044b6c8cefe91847640634d5888826e92ac84b2ebbc646

Contents?: true

Size: 789 Bytes

Versions: 7

Compression:

Stored size: 789 Bytes

Contents

class Proc

  # Returns a new proc that is the functional
  # composition of two procs, in order.
  #
  #   a = lambda { |x| x + 4 }
  #   b = lambda { |y| y / 2 }
  #
  #   a.compose(b).call(4)  #=> 6
  #   b.compose(a).call(4)  #=> 4
  #
  #   CREDIT: Dave

  def compose(g)
    raise ArgumentError, "arity count mismatch" unless arity == g.arity
    lambda{ |*a| self[ *g[*a] ] }
  end

  # Operator for Proc#compose and Integer#times_collect/of.
  #
  #   a = lambda { |x| x + 4 }
  #   b = lambda { |y| y / 2 }
  #
  #   (a * b).call(4)  #=> 6
  #   (b * a).call(4)  #=> 4
  #
  #   CREDIT: Dave

  def *(x)
    if Integer===x
      # collect times
      c = []
      x.times{|i| c << call(i)}
      c
    else
      # compose procs
      lambda{|*a| self[x[*a]]}
    end
  end

end

Version data entries

7 entries across 7 versions & 2 rubygems

Version Path
facets-2.4.0 lib/facets/proc/compose.rb
facets-2.4.1 lib/facets/proc/compose.rb
facets-2.4.2 lib/core/facets/proc/compose.rb
facets-2.4.3 lib/core/facets/proc/compose.rb
facets-2.4.4 lib/core/facets/proc/compose.rb
facets-2.4.5 lib/core/facets/proc/compose.rb
mack-facets-0.8.2 lib/gems/facets-2.4.5/lib/core/facets/proc/compose.rb