2009-05-20 109 views
1

有誰知道是否有方法來訪問在紅寶石塊傳遞參數的名稱?紅寶石塊參數名稱

E.g.

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 2009-05-20 09:01:09

+0

我需要訪問我正在寫的dsl的參數名稱。 – fturtle 2009-05-20 09:02:56

回答

6

這實際上是可能的,但只有在1.9主幹版本:

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

它不是,雖然釋放,並且將最有可能被包含在紅寶石1.9.2。

2

更新:它看起來像Ruby 1.9的可以做你的要求是什麼。請參閱弗洛裏安的回答。

是的,Ruby有這個很棒的工具來傳遞命名參數:Hash。

下面是它如何工作的:

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中知道在方法調用中使用了哪個引用(可能有多個引用)。