class Functor
Functor
is Ruby’s implementation of a Higher-Order-Message. Essentally, a Functor
can vary its behavior accorrding to the operation applied to it.
Example
f = Functor.new { |op, x| x.send(op, x) } (f + 1) #=> 2 (f + 2) #=> 4 (f + 3) #=> 6 (f * 1) #=> 1 (f * 2) #=> 4 (f * 3) #=> 9
Constants
- EXCEPTIONS
Public Class Methods
cache(*key, &function)
click to toggle source
Functors can be somewhat inefficient if a new Functor
is frequently recreated for the same use. So this cache can be used to speed things up.
The key
will always be an array, wich makes it easier to cache Functor
for multiple factors.
# File lib/core/facets/functor.rb, line 23 def self.cache(*key, &function) @cache ||= {} if function @cache[key] = new(&function) else @cache[key] end end
new(&function)
click to toggle source
# File lib/core/facets/functor.rb, line 66 def initialize(&function) @function = function end
Public Instance Methods
to_proc()
click to toggle source
# File lib/core/facets/functor.rb, line 71 def to_proc @function end
Private Instance Methods
method_missing(op, *args, &blk)
click to toggle source
Any action against the Functor
is processesd by the function.
# File lib/core/facets/functor.rb, line 88 def method_missing(op, *args, &blk) @function.call(op, *args, &blk) end