こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

rubyでメソッド内で引数名、値を取得

Rubyでメソッドの引数名をメソッド内部で取得するような事は可能でしょうか?

def hoge(a,b,c)
# ここでa,b,cの引数名、またその値を取得
# 例えば、{:a=>1, :b=>2, :c=>3}のようにHashの形式で得るなど。
end

local_variablesだと、引数も含まれますがその他で定義したものも拾ってしまうため、他の方法を探しています。
わかる方がいれば教えていただけますでしょうか。

投稿日時 - 2011-12-25 23:13:57

QNo.7209130

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

def hoge(option = {})
 option.each_paier do |k,v|
  p k
  p v
  #なんかの処理
 end
end

hoge(:hoge => "hoge", :piyo => "piyo")
こんなのどうですか?

投稿日時 - 2011-12-28 15:21:45

補足

ご回答ありがとうございます。
提示いただいた方法で、結果的には意図するものは得られるのですが、今回、質問の内容を何らかの方法で解決するという意図より、
> def hoge(a,b,c)
このように宣言されたメソッドに対して引数の情報(引数名、値など)をメソッド内で取得する方法が無いかを単純に興味も含め探しています。

投稿日時 - 2011-12-31 10:51:09

ANo.2

No1です。
>(引数に対してループをして、引数の情報の取得、処理を行う)

ということであれば、def hoge(*args) と配列で受ければ良いのでは?

投稿日時 - 2011-12-26 22:10:50

補足

ご回答ありがとうございます。
提示いただいた方法で、結果的には意図するものは得られるのですが、今回、質問の内容を何らかの方法で解決するという意図より、
> def hoge(a,b,c)
このように宣言されたメソッドに対して引数の情報(引数名、値など)をメソッド内で取得する方法が無いかを単純に興味も含め探しています。

投稿日時 - 2011-12-31 10:51:17

ANo.1

質問の意図がよくわかりませんが、自分で def hoge(a,b,c) と書いているのだから、引数は a b c だとわかりますよね?

投稿日時 - 2011-12-25 23:26:43

補足

はい、目視すればわかります。
ただ、今回の狙いとしてメソッド内で引数全てに対してのループ処理を行たかったのです。
(引数に対してループをして、引数の情報の取得、処理を行う)

そもそもループさせるほどの引数の多さなども問題ではあるのですが、興味も含めて今回の質問のような処理が可能なのかどうかを知りたいと思っていました。

投稿日時 - 2011-12-26 09:39:56

あなたにオススメの質問