有没有人知道是否有办法访问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这样的东西,我只是想知道是否有更简单/更笨的方式。
由于
答案 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中知道方法调用中使用了哪个引用(可能有很多引用)。