Ruby告诉我一个参数正在传递(应该是0)。我期待** {}是等价的。我的想法出现在哪里?
{{1}}
答案 0 :(得分:4)
好吧,让我们来看看:
def wrapper(*args, **keys, &block)
keys.delete :key
p **keys
行:
$ ruby test.rb
{}
所以,不,**{}
在调用方法时不会从参数列表中删除它,它只是计算为空哈希。
在StackOverflow上查看另一个question,以及相应的Ruby bug report。
答案 1 :(得分:1)
您收到错误的原因是send
方法使用参数调用takenothing
方法,但takenothing
方法不接受任何参数。
Test.new.send :takenothing, *args, **keys, &block
Test.new.send symbol [, args...])
和你的方法
def takenothing() end # this method takes no argument