を使用するirb
と、次のようにして特定のオブジェクトのメソッドを一覧表示できます。
"Name".methods
しかし、特定のメソッドに必要なパラメーターの数を知りたい場合、どうすればこれを達成できますか? つまり、(irb で何らかのコマンドを実行することによって) 特定のメソッドのパラメーターの数を (ドキュメントを参照する代わりに) 取得できる方法はありますか?
.methods
メソッドのパラメーターのリストではなく、メソッド名のみを返します。
を使用するirb
と、次のようにして特定のオブジェクトのメソッドを一覧表示できます。
"Name".methods
しかし、特定のメソッドに必要なパラメーターの数を知りたい場合、どうすればこれを達成できますか? つまり、(irb で何らかのコマンドを実行することによって) 特定のメソッドのパラメーターの数を (ドキュメントを参照する代わりに) 取得できる方法はありますか?
.methods
メソッドのパラメーターのリストではなく、メソッド名のみを返します。
メソッドを使用できます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]]
使用できますarity
メソッドが受け入れる引数の数を返します。固定数の引数を取るメソッドの非負の整数を返します。可変数の引数を取る Ruby メソッドの場合、-n-1 を返します。ここで、n は必要な引数の数です。C で記述されたメソッドの場合、呼び出しが可変数の引数を取る場合は -1 を返します。
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