我知道Ruby中的::
是用来访问模块和类中的方法的作用域解析运算符,但是使用::
来命名类是否合适呢?
示例:
class Foo::Bar::Bee < Foo::Bar::Insect
def a_method
[...]
end
end
我知道Ruby中的::
是用来访问模块和类中的方法的作用域解析运算符,但是使用::
来命名类是否合适呢?
示例:
class Foo::Bar::Bee < Foo::Bar::Insect
def a_method
[...]
end
end
# lib/foo.rb
module Foo
end
# lib/foo/bar.rb
class Foo::Bar
end
如果您不能确定父模块或类已经存在,我建议您避免以这种方式定义类,因为您将由于父类(例如Foo
)不存在而收到NameError
。因此,您不会看到很多遵循更简洁模式的开源软件。
class Foo::Bar
end
module Foo
class Bar
end
end
class Foo::Bar; end # uninitialized constant Foo (NameError)
module Foo; end
class Foo::Bar; end
是的,那种用法是完全有效的。这种格式只是引用常量的一种方式;表达式最终解析为一个单一的常量。
Foo::Bar::Insect
中的Bar实际上不是子模块或类? - OdeFoo::Bar
,而只是Bar
。 - coreyward