【发布时间】:2017-08-18 21:03:45
【问题描述】:
这个想法类似于你在 python 中使用装饰器所做的事情,我不知道该方法需要什么参数,所以我将 *args, **kwargs 作为一般情况传递
当我想将空哈希作为 kwargs 传递给不带参数的方法时,问题就出现了
def my_method
'I have run correctly'
end
args = []
kwargs = {}
my_method *args, **kwargs
=> ArgumentError: wrong number of arguments (given 1, expected 0)
有趣的是,似乎只有 kwargs 变量是问题,因为:
my_method *args, **{}
=> 'I have run correctly'
如果您能建议一种方法,将方法对象作为参数实际传递给函数,那也太完美了。
【问题讨论】:
-
方法对象是什么意思?
-
你可以写
def receive_method(m); m.call('hi'); end; q = method(:puts) #=> #<Method: Object(Kernel)#puts>; receive_method(q) #=> 'hi'。见Object#method。 -
这是一个众所周知的错误,已在 Stack Overflow 上提出并回答,并且已在 Ruby 问题跟踪器中归档。如果以后有时间,我可以挖掘参考,但如果我没记错的话,这个问题很可能是重复的。
-
错误报告的链接在重复问题的已接受答案中。
标签: ruby function hash keyword-argument splat