首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby - splat和send()混淆

Ruby - splat和send()混淆
EN

Stack Overflow用户
提问于 2016-09-02 02:35:32
回答 2查看 76关注 0票数 2

Ruby告诉我传递了一个参数(应该是0)。我希望**{}是等同的。我的想法中的错误在哪里?

代码语言:javascript
复制
class Test
  def takenothing() end
end 

def wrapper( *args, **keys, &block )
  keys.delete :key
  Test.new.send :takenothing, *args, **keys, &block
end

wrapper key: 'nyeh'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-02 03:29:46

好了,让我们来看看:

代码语言:javascript
复制
def wrapper(*args, **keys, &block)
  keys.delete :key
  p **keys

好的:

代码语言:javascript
复制
$ ruby test.rb 
{}

所以,不,当调用一个方法时,**{}不会将它从参数列表中删除,它只是计算为一个空的散列。

看看StackOverflow上的另一个question,以及相应的Ruby bug report

票数 4
EN

Stack Overflow用户

发布于 2016-09-02 03:14:03

出现错误的原因是因为send方法使用参数调用takenothing方法,而takenothing方法不接受任何参数。

代码语言:javascript
复制
Test.new.send :takenothing, *args, **keys, &block
Test.new.send symbol        [, args...])

和你的方法

代码语言:javascript
复制
def takenothing() end  # this method takes no argument
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39278662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档