23

を使用するirbと、次のようにして特定のオブジェクトのメソッドを一覧表示できます。

"Name".methods

しかし、特定のメソッドに必要なパラメーターの数を知りたい場合、どうすればこれを達成できますか? つまり、(irb で何らかのコマンドを実行することによって) 特定のメソッドのパラメーターの数を (ドキュメントを参照する代わりに) 取得できる方法はありますか?

.methodsメソッドのパラメーターのリストではなく、メソッド名のみを返します。

4

3 に答える 3

40

メソッドを使用できますMethod#arity

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

Ruby のドキュメントから:

メソッドが受け入れる引数の数を返します。固定数の引数を取るメソッドの非負の整数を返します。可変数の引数を取る 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です。非常に役立つ可能性があります。

def foo(a, *b); end
method(:foo).parameters
# => [[:req, :a], [:rest, :b]] 
于 2013-07-11T09:43:37.313 に答える
9

使用できます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
于 2013-07-11T09:45:06.770 に答える