Class: Functor
Overview
Functor
By definition a Functor is simply a first class method, but these are common in the form of Method and Proc. So here a Functor is a bit more specialied as a 1st class metafunction. Essentally, a Functor can vary its behavior accorrding to the operation applied to it.
Synopsis
require 'carat/functor'
f = Functor.new { |op, x| x.send(op, x) }
f + 1 #=> 2
f + 2 #=> 4
f + 3 #=> 6
f * 1 #=> 1
f * 2 #=> 2
f * 3 #=> 9
Notes
It would probably be a little better if we had a kernelless base object class. Built-in public Object methods will not work in a Functor b/c of this. Or perhaps this can improved via delegation.
History
-
2005-04-11 Passed basic tests.
Instance Method Summary collapse
-
#initialize(&func) ⇒ Functor
constructor
A new instance of Functor.
- #method_missing(op, *args) ⇒ Object
Constructor Details
#initialize(&func) ⇒ Functor
Returns a new instance of Functor.
35 36 37 |
# File 'lib/carat/functor.rb', line 35 def initialize(&func) @func = func end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(op, *args) ⇒ Object
38 39 40 |
# File 'lib/carat/functor.rb', line 38 def method_missing(op, *args) @func.call(op, *args) end |