当前位置:  开发笔记 > 后端 > 正文

如何修复类a :: b :: c的rubocop攻击

如何解决《如何修复类a::b::c的rubocop攻击》经验,为你挑选了1个好方法。

我有以下文件lib/a/b/c.rb

class a::b::c
  def request(env)
    #some code here
  end
end

现在我使用的是rubocop风格

Style/ClassAndModuleChildren:
  Enabled: true

我为此获得了rubocop的进攻

lib/a/b/c.rb:1:7: C: Use nested module/class definitions instead of compact style.
class a::b::c

当我更新我的代码到以下的攻击得到修复

风格1

class a
  class b
    class c
      def request(env)
        #some code here
      end
    end
  end
end

风格2

module a
  module b
    class c
      def request(env)
        #some code here
      end
    end
  end
end

我想我应该使用Style 2require 'a'在我的一个文件中使用.

请让我知道如何修复此类型和违法行为及其原因



1> ndnenkov..:

这被标记为冒犯的原因是常量解析在词法上起作用,而不是在ruby中在语义上起作用.这不直观,可能会导致一些模糊的错误(例如,如果在两个不同的范围内有两个具有相同名称的类).比较这两种情况:

# Given
module Foo
  X = 42
end

# This
module Foo
  class Bar
    def baz
      puts X
    end
  end
end

# VS
class Foo::Bar
  def baz
    puts X
  end
end

现在你打电话的时候:

Foo::Bar.new.baz

在第一种情况下,你会得到42,在第二种情况下-NameError: uninitialized constant Foo::Bar::X


至于哪个是修正它的正确方法:请注意,如果Foo不存在,使用短语法将给出错误.答案是 - 你应该使用任何东西Foo.如果它是一个类 - 使用class,如果它是一个模块 - module.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有