Class | UnboundMethod |
In: |
lib/core/facets/unboundmethod/arguments.rb
lib/core/facets/unboundmethod/name.rb |
Parent: | Object |
Resolves the arguments of the method to have an identical signiture —useful for preserving arity.
class X def foo(a, b); end def bar(a, b=1); end end foo_method = X.instance_method(:foo) foo_method.arguments #=> "a0, a1" bar_method = X.instance_method(:bar) bar_method.arguments #=> "a0, *args"
When defaults are used the arguments must end in "*args".
CREDIT: Trans
# File lib/core/facets/unboundmethod/arguments.rb, line 21 def arguments ar = arity case ar <=> 0 when 1 args = [] ar.times do |i| args << "a#{i}" end args = args.join(", ") when 0 args = "" else ar = -ar - 1 args = [] ar.times do |i| args << "a#{i}" end args << "*args" args = args.join(", ") end return args end
Return the name of the method.
Be aware that in ruby 1.9 UnboundMethod#name is defined already, but it returns a Symbol not a String.
class X def foo; end end meth = X.instance_method(:foo) meth.name #=> "foo"
CREDIT: Trans
# File lib/core/facets/unboundmethod/name.rb, line 18 def name i = to_s.rindex('#') to_s.slice(i+1...-1) end