| 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