module Spruz::PartialApplication
Public Class Methods
included(modul)
click to toggle source
If this module is included into a Proc (or similar object), it tampers with its Proc#arity method.
Calls superclass method
# File lib/spruz/partial_application.rb, line 5 def self.included(modul) modul.module_eval do old_arity = instance_method(:arity) define_method(:arity) do @__arity__ or old_arity.bind(self).call end end super end
Public Instance Methods
partial(*args)
click to toggle source
Create a partial application of this Proc (or similar object) using args as the already applied arguments.
# File lib/spruz/partial_application.rb, line 17 def partial(*args) if args.empty? dup elsif args.size > arity raise ArgumentError, "wrong number of arguments (#{args.size} for #{arity})" else f = lambda { |*b| call(*(args + b)) } f.instance_variable_set :@__arity__, arity - args.size f end end