2014-01-20 31 views
2

假设我有一个方法标题:有没有办法在ruby 2中使用关键字参数进行递归,而无需重新指定每个参数?

def meth(a: val1, b: val2, c: val3) 

和内部meth,我想打一个递归调用,并通过所有相同的参数,但改变一个..

或许真的与此类似,语义上:

meth(_args_.merge(c: newval)) 

这是可能的吗?

+0

你能不能做参数为散列,将其与包含默认值的散列合并,在'meth'中执行您需要做的事情,然后更改递归的一个键?我理解类似的东西是在命名参数被支持之前完成的。 –

回答

1

不知道如果一个内置的方法存在着这样做,但它使用local_variables和一些EVAL-Fu的明显可能:

def foo(bar: :baz) 
    Hash[local_variables.map { |k| [k, eval("#{k}")] }] 
end 

foo # {:bar=>:baz} 

相关问题:

How do I dynamically create a local variable in Ruby?

+0

local_variables整洁。虽然这种方法有很多非正式的参数 - 所以local_variables非常大。有没有更简单的方法来传递方法头文件? 我想可以做'method(:meth).parameters.map {| a | a.last}'并根据结果过滤'local_variables'。此时,只要指定所有参数即可。大声笑。仍然整齐地知道这是可能的,但。 – NullVoxPopuli

+1

Null,如果你这样做了,你可以用'method(__ method __)。parameters ...'代替。 –

相关问题