2009-05-20 78 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中知道在方法调用中使用了哪个引用(可能有多个引用)。