我知道Ruby中的::
是一个范围解析运算符,用于访问模块和类中的方法,但使用::
命名类是否合适?
实施例
class Foo::Bar::Bee < Foo::Bar::Insect
def a_method
[...]
end
end
答案 0 :(得分:3)
如果“正确”,则表示语法正确 - 是。
这样做没有任何本质上的错误,如果你在一个单独的文件中定义一个子类(下面的例子),那么这是一种相对常见的做法。
# lib/foo.rb
module Foo
end
# lib/foo/bar.rb
class Foo::Bar
end
如果你不能确定父模块或类已经存在,我会避免以这种方式定义类,因为你会得到NameError
,因为父(例如Foo
)没有现有。因此,您不会看到更多简洁模式的开源软件。
class Foo::Bar
end
module Foo
class Bar
end
end
答案 1 :(得分:1)
用法完全有效。
只要警惕陷阱:
class Foo::Bar; end # uninitialized constant Foo (NameError)
这样可以正常工作:
module Foo; end
class Foo::Bar; end
答案 2 :(得分:0)
是的,这种用法完全有效。格式只是引用常量的一种方式;表达式解析为一个单独的常量。