2013-07-11 6 views
12

irbを使用して、我々は以下のようにして特定のオブジェクトのメソッドの一覧を表示することができますメソッドに必要なパラメータの数を知る方法はありますか?

"Name".methods 

しかし、私は特定のメソッドのために必要とされるどのように多くのパラメータを知りたい場合は、どのように私はこれを達成することができますか?私は何らかの方法で(irbでいくつかのコマンドを打つことによって)、(docsを参照するのではなく)特定のメソッドのパラメータ数を得ることができますか?

.methodsは、メソッドの名前だけを返し、メソッドのパラメータのリストは返しません。 Rubyのドキュメントから

"string".method(:strip).arity 
# => 0 

:あなたはメソッドMethod#arityを使用することができます

答えて

33

は、メソッドが受け付ける引数の数の表示を返します。 固定数の 引数を取るメソッドに対して、負ではない整数を返します。可変数の引数をとるRubyメソッドの場合、 は-n-1を返します。ここでnは必要な引数の数です。 Cで書かれたメソッド の場合、呼び出しが可変番号 引数をとる場合は-1を返します。

ので、例えば:

# 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 


更新私はちょうどMethod#parametersのexitenceを発見した、それは非常に有用である可能性:

def foo(a, *b); end 
method(:foo).parameters 
# => [[:req, :a], [:rest, :b]] 
+0

感謝します!!!!! – TDHM

8

あなたはarity

を使用することができます

メソッドによって受け入れられた引数の数の指示を返します。固定数の引数を取るメソッドに対して負ではない整数を返します。可変数の引数をとるRubyメソッドでは、-n-1を返します。ここで、nは必要な引数の数です。 Cで書かれたメソッドの場合、呼び出しが可変数の引数を取る場合は-1を返します。 ruby-doc

から

class C 
    def one; end 
    def two(a); end 
    def three(*a); end 
    def four(a, b); end 
    def five(a, b, *c); end 
    def six(a, b, *c, &d); end 
end 

c = C.new 
c.method(:one).arity  #=> 0 
c.method(:two).arity  #=> 1 
c.method(:three).arity #=> -1 
c.method(:four).arity #=> 2 
c.method(:five).arity #=> -3 
c.method(:six).arity  #=> -3 
関連する問題