Ruby - splat和send()混淆

时间:2016-09-01 18:35:32

标签: ruby

Ruby告诉我一个参数正在传递(应该是0)。我期待** {}是等价的。我的想法出现在哪里?

{{1}}

2 个答案:

答案 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