首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决Rubocop respond_to_missing?犯罪

如何解决Rubocop respond_to_missing?犯罪
EN

Stack Overflow用户
提问于 2016-07-27 06:49:47
回答 2查看 4.1K关注 0票数 7

鲁博克犯了以下罪行

代码语言:javascript
复制
lib/daru/vector.rb:1182:5: C: Style/MethodMissing: When using method_missing, define respond_to_missing? and fall back on super.
    def method_missing(name, *args, &block) ...
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

缺少的方法定义为:

代码语言:javascript
复制
def method_missing(name, *args, &block)
  if name =~ /(.+)\=/
    self[$1.to_sym] = args[0]
  elsif has_index?(name)
    self[name]
  else
    super(name, *args, &block)
  end
end

我试着用下面的代码修复它,从这里中看到一个示例

代码语言:javascript
复制
def respond_to_missing?(method_name, include_private=false)
  (name =~ /(.+)\=/) || has_index?(name) || super
end

但现在鲁博克对我犯了以下罪行:

代码语言:javascript
复制
lib/daru/vector.rb:1182:5: C: Style/MethodMissing: When using method_missing, fall back on super.
    def method_missing(name, *args, &block) ...
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

我好像搞不清到底是怎么回事。正如你所看到的,我在另一个街区里又回到了超级超市。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-27 15:46:00

Rubocop希望不带参数地调用super。由于要传递给super的参数与收到的参数相同,因此可以简单地删除参数:

代码语言:javascript
复制
def method_missing(name, *args, &block)
  if name =~ /(.+)\=/
    self[$1.to_sym] = args[0]
  elsif has_index?(name)
    self[name]
  else
    super
  end
end
票数 7
EN

Stack Overflow用户

发布于 2018-07-16 23:51:39

也许你应该试试def respond_to_missing?(name, include_private=false)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38605669

复制
相关文章

相似问题

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