对 Ruby 类进行命名和将其包装在模块中有什么区别?

What's the difference between namespacing a Ruby class and wrapping it in a module?

提问人:hoffm 提问时间:7/26/2019 最后编辑:hoffm 更新时间:7/26/2019 访问量:46

问:

class Baz
end

module Foo
end

module Foo
  class Bar1 < Baz
    # ...
  end
end

class Foo::Bar2 < Baz
  # ...
end

我曾这样想过,并且应该表现得相同,因为我认为将类声明包装起来和命名类只是语法变体。但是,我看到这两者在实际应用程序中的行为不同,所以我一定是错的!Bar1Bar2module Foo...endFoo::

Bar1Bar2 之间的行为(如果有的话)到底有什么区别?

第二个问题:他们有一个明确声明的超类()这一事实是否有所作为,或者这是一个红鲱鱼?Baz

Ruby 命名空间 常量

评论

2赞 engineersmnky 7/27/2019
区别在于不断查找本文似乎涵盖了您的确切场景。这个是老的,但很好,而且更深入
0赞 hoffm 7/27/2019
@engineersmnky 是的,这看起来像票。考虑到我花时间调查持续查找 (medium.com/@hoffm/a-puzzle-about-ruby-constants-e958d15dbada),你会认为我已经意识到了这一点!

答: 暂无答案