2009-05-20 8 views
1

ルビーブロックで渡されたパラメータの名前にアクセスする方法があるかどうか知りませんか?ルビーブロックのパラメータ名

など。

def do_something() 
    # method uses the names of the parameters passed to the block 
    # in addition to their values 
    # e.g. the strings "i" and "j" 
end 

do_something { |i, j| ... } 

私は執筆中のDSLの要件であり、非常に珍しい使用例です。これはおそらくparsetreeのようなもので可能ですが、私はちょっとだけ気が利いていました。

おかげ

+0

なぜこれをやりたいですか? – Chuck

+0

私が書いているdslのパラメータ名にアクセスする必要があります。 – fturtle

+1

あなたはどのような問題がこれを引き起こしているのかの例を与えることができますか(質問文を展開してください)?私はあなたがブロック宣言構文をそれが取らない形に曲げようとしているかもしれないと懸念しています...それは不可能ですが、あなたは別の方法をしたいところに行くことができるかもしれません。 –

答えて

6

これは実際に可能であるが、唯一の1.9のトランクバージョンに:

->(a,b,c) {}.parameters 

それはしかし解放されておらず、おそらくRubyの1.9.2に含まれます。

+0

ええ、これはポスターが知りたかったものです。 Ruby 1.9は引き続き印象深い! – m104

+0

これは今はトランクにしかないことに注意してください。 1.9.1にはありません。 – Chuck

+0

素晴らしい。みんな助けてくれてありがとう。それを試すことを楽しみにしています。 – fturtle

2

更新:それはRuby 1.9のように見えますが、あなたが要求しているものを行うことができます。フロリアンの答えを見てください。

はい、まあ、Rubyには、名前付きパラメータを渡すためのこの素晴らしい機能があります:ハッシュ。それがどのように動作するか

はここにいません:

def do_something(params) 
    params.each do |key, value| 
    puts "received parameter #{key} with value #{value}" 
    end 
end 

do_something(:i => 1, :j => 2) 

は、そうでない場合は、実際にRubyで渡された変数の名前を取得する方法はありません。 Rubyの変数はObjectへの参照に過ぎないため、メソッド呼び出しでどの参照が使用されたのかをObjectから知る方法はありません。

関連する問題