我有以下文件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 2
我require 'a'
在我的一个文件中使用.
请让我知道如何修复此类型和违法行为及其原因
这被标记为冒犯的原因是常量解析在词法上起作用,而不是在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
.