【发布时间】:2019-02-19 15:56:31
【问题描述】:
问题
在一个方法中,如何将作为方法发送的一部分提供的所有参数传递给另一个方法发送?参数都应该在没有像*args 这样的占位符/捕获符的意义上命名,但它们可以是关键字参数和非关键字参数的混合。另外,内部方法 send 不是super。
示例(伪代码)
def some_method(a_parameter, a_named_parameter:)
...do something...
some_other_method([send with original parameters])
...do something else...
end
相关问题
Is there a way to access method arguments in Ruby? 7 年前被问过。
丑陋的黑客
根据我的发现,可以对关键字参数做这样的事情:
def some_method(a_named_parameter:, another_named_parameter:)
...do something...
params = method(__method__)
.parameters
.map { |p| [p[1], binding.local_variable_get(p[1])] }
.to_h
some_other_method(**params)
...do something else...
end
这对于非关键字参数:
def some_method(a_named_parameter, another_named_parameter)
...do something...
params = method(__method__)
.parameters
.map { |p| binding.local_variable_get(p[1]) }
some_other_method(*params)
...do something else...
end
根据method(__method__).parameters 返回的信息,人们也可以制定出对两者都适用的解决方案,但即使可以将所有这些都提取到帮助程序中,这也太复杂了。
【问题讨论】:
-
我不明白,你知道
some_other_method的签名。为什么不简单地写出它需要的所有参数呢?它简单易读,不需要魔法。 -
当然是@SergioTulentsev,我也会照常这样做。但是考虑到可以拨打
super,而且我觉得这真的很方便,我想知道是否也可以这样做。我希望它不像黑客那样神奇。 -
我明白了。我希望你能找到它:)
-
@SergioTulentsev 欢迎您对我的回答提出意见,因为我正在努力寻找可能遗漏的边缘案例。
标签: ruby