Module: LambdaDriver::Flipable
Class Method Summary collapse
Instance Method Summary collapse
-
#flip(arity = nil) ⇒ Object
Returns function whose parameter order spawed 1st for 2nd.
Class Method Details
.included(klass) ⇒ Object
36 37 38 |
# File 'lib/lambda_driver/flipable.rb', line 36 def self.included(klass) klass.send(:alias_method, :~@, :flip) end |
Instance Method Details
#flip(arity = nil) ⇒ Object
Returns function whose parameter order spawed 1st for 2nd. A result of filped fuction is curried by Proc#curry.
f = lambda{|x, y, z| [x, y, z]}
h = f.flip
h.(:a).(:b).(:c) # => [:b, :a, :c]
If arguments is var-args, pass explicitly arity to curring.
p = Proc.new{|*args| args.inspect }
p.flip(3).call(:a).(:b).(:c) # => "[:b, :a, :c]"
p.flip(4).call(:a).(:b).(:c).(:d) # => "[:b, :a, :c, :d]"
If arity is 0 or 1, flip returns itself.
This method is aliased as ‘~@`.
~f # => f.filp
22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/lambda_driver/flipable.rb', line 22 def flip(arity = nil) f = self.to_proc return self if (0..1).include?(f.arity) return self if f.arity == -1 && arity.nil? curried = f.curry(arity) lambda{|x| lambda{|y| g = curried[y] (g.respond_to? :call) ? g[x] : g } } end |