我希望在另一个方法中使用一个方法,并返回参数而不需要提及参数名称,如下所示return_arguments
。
def foo a, b, *c
... # part a
p return_arguments
... # part b
end
foo(1, "blah blah", :a, :b)
... # return from part a
# => [1, "blah blah", :a, :b]
... # return from part b
这可能吗?我发现可能会使用binding
,local_variables
和eval
,但我不确定如何将参数与上面part a
中定义的其他局部变量区分开来。 local_variables
是否有特定的排序规则?如果是这样,也许我可以与arity
一起使用它来提取参数。
答案 0 :(得分:1)
在方法中首先使用local_variables
,即在设置任何局部变量之前,并保存结果供以后使用。
答案 1 :(得分:1)
可能最简单的事情就是这样:
def foo(*args)
a, b, *c = *args
# (...)
p args
# (...)
end
或相反:
def foo(a, b, *c)
args = [a, b, *c]
# (...)
p args
# (...)
end
我不确定你为什么反对至少提一次提到参数名称。在方法中分配“参数”(让保持完整的数组)或从解析的参数重建数组,这是最直接和可读的。
答案 2 :(得分:1)
这绝对是低效的,但这是一个解决方案(虽然你可能应该使用像@tadman提到的哈希):
set_trace_func proc { |e,_,_,i,b,_|
if e == 'call'
p = method(i).parameters
@arguments = p.map {|p| eval(p[1].to_s,b)}
end
}
def foo a, b, *c
a = 50
b = 3
return @arguments
a = 11
b = 2
end
p foo(1, "blah blah", :a, :b)