2017-11-09 11 views
2

メソッドのパラメータの名前と値を動的に取得する方法はありますか?メタプログラミングですか?Ruby - メソッドの名前と値を取得する

def my_method(name, age) 
    # some code that solves this issue 
end 

my_method('John', 22) # => { name: 'John', age: 22 } 

私はメソッドの呼び出しとそれぞれのパラメータを記録するために、すべての私の方法でこれを使用したいのですが、なくてはあらゆる方法で手動でこれを行うには。

ありがとうございました。

答えて

4

ルビーでは、bindingと呼ばれ、特定の行が実行されるコンテキストをカプセル化するオブジェクトです。完全なドキュメントはhereですが、あなたはおそらくそれを助けることができるかどう

def my_method(arg1, arg2) 
    var = arg2 
    p binding.local_variables #=> [:arg1, :arg2, :var] 
    p binding.local_variable_get(:arg1) #=> 1 
    p Hash[binding.local_variables.map{|x| [x, binding.local_variable_get(x)]}] #=> {:arg1 => 1, :arg2 => 2, :var => 2} 
end 

my_method(1, 2) 

...あなたが何をしようとしての場合、私は強く、Binding#evalに対して助言するだろう。 evalを使用するよりも、ほとんど常に問題を混乱させる良い方法があります。 bindingは、呼び出される行のコンテキストをカプセル化するので、単純なlog_parameters_at_this_pointメソッドを使用することを望む場合は、そのメソッドにバインディングを渡すか、

+0

パーフェクトのようなものを使用する必要があります@ymbirtt、多くのありがとう –

関連する問題