Ruby阻止参数名称

时间:2009-05-20 08:54:36

标签: ruby

有没有人知道是否有办法访问ruby块中传递的参数名称?

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这样的东西,我只是想知道是否有更简单/更笨的方式。

由于

2 个答案:

答案 0 :(得分:6)

这实际上是可行的,但仅限于1.9的主干版本:

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

虽然它没有发布,很可能会包含在Ruby 1.9.2中。

答案 1 :(得分:2)

更新:看起来Ruby 1.9可以满足您的要求。见Florian的回答。

是的,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中知道方法调用中使用了哪个引用(可能有很多引用)。