| Module | Enumerable::Arguments |
| In: |
lib/more/facets/enumargs.rb
|
# File lib/more/facets/enumargs.rb, line 47
47: def self.wrap_enumerable_method( methodname )
48:
49: m = methodname
50: meth = Enumerable.instance_method(m)
51: arity = meth.arity
52:
53: case arity <=> 0
54: when 0
55: class_eval %{
56: def #{m}( *args, &yld )
57: enum_for(:each, *args).#{m}( &yld )
58: end
59: }
60: when 1
61: class_eval %{
62: def #{m}( *args, &yld )
63: args, each_args = args[0...#{arity}], args[#{arity}..-1]
64: enum_for(:each, *each_args).#{m}( *args, &yld )
65: end
66: }
67: else
68: class_eval %{
69: def #{m}( *args, &yld )
70: enum_for(:each).#{m}( *args, &yld )
71: end
72: }
73: end
74: end
Make exception for find (a negative arity method) to accept keyword argument.
ObjectSpace.find(Class, :ifnone=>lambda{1}) { |e| ... }
ObjectSpace.find(Class, :ifnone=>lambda{1}) { |e| ... }
# File lib/more/facets/enumargs.rb, line 91
91: def find(*args, &yld) # future use **keys ?
92: if Hash === args.last and args.last.key?(:ifnone)
93: ifnone = args.last.delete(:ifnone)
94: args.pop if args.last.empty?
95: enum_for(:each, *args).find( ifnone, &yld )
96: else
97: enum_for(:each, *args).find( &yld )
98: end
99: end