带有双冒号的 Ruby 类命名约定

Ode*_*Ode 5 ruby ruby-on-rails ruby-on-rails-3.2

我知道::Ruby 是一个作用域解析运算符,用于访问模块和类中的方法,但是使用::?

例子

class Foo::Bar::Bee < Foo::Bar::Insect

  def a_method
    [...]
  end

end
Run Code Online (Sandbox Code Playgroud)

cor*_*ard 5

如果“正确”的意思是语法正确—— 是的

这样做并没有什么本质上的错误,如果您在单独的文件中定义子类(下面的示例),那么这是一种相对常见的做法。

# lib/foo.rb
module Foo
end

# lib/foo/bar.rb
class Foo::Bar
end
Run Code Online (Sandbox Code Playgroud)

我会避免定义类这样,如果你不能肯定的是,父模块或类已经存在,不过,因为你会得到一个NameError由父(例如Foo)不存在。出于这个原因,您不会看到很多遵循更简洁模式的开源软件。

孤立地看,这行不通:

class Foo::Bar
end
Run Code Online (Sandbox Code Playgroud)

但是,这将起作用:

module Foo
  class Bar
  end
end
Run Code Online (Sandbox Code Playgroud)


Pet*_*vin 0

是的,这种用法完全有效。格式只是引用常量的一种方式;表达式仍然解析为单个常量。