Sha256: bf67ae51af2e57c27cc3f0c46454efbdf5a9491d7fe0095c28de39a6a4ead65a
Contents?: true
Size: 1.54 KB
Versions: 1
Compression:
Stored size: 1.54 KB
Contents
#-- # Functor # # Copyright (c) 2004,2005 Thomas Sawyer # # Ruby License # # This module is free software. You may use, modify, and/or redistribute this # software under the same terms as Ruby. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. # # # ========================================================================== # Revision History :: # -------------------------------------------------------------------------- # 5.1.10 Trans * Minor modifications to documentation. # ========================================================================== #++ #:title: 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 'mega/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. # # == Author(s) # # * Thomas Sawyer # class Functor def initialize(&func) @func = func end def method_missing(op, *args) @func.call(op, *args) end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
mega-0.3.1 | lib/mega/functor.rb |