Is there a way to know how many parameters are needed for a method?
ruby
Solution
You can use the method `Method#arity`:
"string".method(:strip).arity
# => 0
From the Ruby documentation:
Returns an indication of the number of arguments accepted by a method. Returns a nonnegative integer for methods that take a fixed number of arguments. For Ruby methods that take a variable number of arguments, returns -n-1, where n is the number of required arguments. For methods written in C, returns -1 if the call takes a variable number of arguments.
So, for example:
# Variable number of arguments, one is required
def foo(a, *b); end
method(:foo).arity
# => -2
# Variable number of arguments, none required
def bar(*a); end
method(:bar).arity
# => -1
# Accepts no argument, implemented in C
"0".method(:to_f).arity
# => 0
# Variable number of arguments (0 or 1), implemented in C
"0".method(:to_i).arity
# => -1
Update I've just discovered the exitence of `Method#parameters`, it could be quite useful:
def foo(a, *b); end
method(:foo).parameters
# => [[:req, :a], [:rest, :b]]
Problem
Using `irb`, we can list methods for particular object by doing following: ``` "Name".methods ``` But if I want to know how many parameters are needed for a particular method, how can I achieve this? I mean is there any way (by hitting some command on irb), we can get number of parameters for particular method (instead of referring to docs)? `.methods` returns only method names, not list of parameters for method.