Rubyでメソッドの引数にアクセスする方法はありますか?
概要
Ruby と ROR は初めてですが、毎日気に入っています。Google で検索する方法がわからないので、ここに質問があります (試してみました:))
私たちにはメソッドがあります
def foo(first_name, last_name, age, sex, is_plumber)
# some code
# error happens here
logger.error "Method has failed, here are all method arguments #{SOMETHING}"
end
それで、私が探しているのは、それぞれをリストせずに、メソッドに渡されるすべての引数を取得する方法です。これはRubyなので、方法があると思います:) Javaだったら、単にそれらをリストするだけです:)
出力は次のようになります:
Method has failed, here are all method arguments {"Mario", "Super", 40, true, true}
解決策
Ruby 1.9.2 以降では、メソッドでパラメータ メソッドを使用して、そのメソッドのパラメータのリストを取得できます。これにより、パラメータの名前とそれが必須かどうかを示すペアのリストが返されます。
例えば
もし、するなら
def foo(x, y)
end
それから
method(:foo).parameters # => [[:req, :x], [:req, :y]]
特殊変数 method を使用して、現在のメソッドの名前を取得できます。したがって、メソッド内でそのパラメータの名前は次のようにして取得できます。
args = method(__method__).parameters.map { |arg| arg[1].to_s }
次に、次のようにして各パラメータの名前と値を表示できます。
logger.error "Method failed with " + args.map { |arg| "#{arg} = #{eval arg}" }.join(', ')
注: この回答は最初に書かれたものなので、Ruby の現在のバージョンでは、シンボルを使用して eval を呼び出すことはできなくなりました。これに対処するために、パラメーター名のリスト、つまりparameters.map { |arg| を作成するときに明示的な to_s が追加されました。 arg[1].to_s }