Rubyでメソッド引数にアクセスする方法はありますか? 質問する

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}

ベストアンサー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 }

おすすめ記事