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}
ベストアンサー1
Ruby 1.9.2 以降では、parameters
メソッドの メソッドを使用して、そのメソッドのパラメータのリストを取得できます。これにより、パラメータの名前とそれが必須かどうかを示すペアのリストが返されます。
例えば
もし、するなら
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
シンボルで呼び出すことができなくなりました。これに対処するために、to_s
パラメータ名のリストを構築するときに明示的なが追加されました。parameters.map { |arg| arg[1].to_s }