Ruby模块声明

这样做有什么区别吗?

class Bus::Driver end 

 module Bus class Driver end end 

如果不是,首选哪种语法?

做[…]之间有什么区别吗?

唯一的区别是,在class Bus::Driver 必须已经定义了Bus模块,而第二个不同。

首选哪种语法?

这不是一个建设性的问题,但我个人更喜欢第二个,因为它明确指出Bus是一个模块,而第一个我看不到Bus是一个模块还是一个类。

这本身就是:

 class Bus::Driver end 

将导致错误NameError: uninitialized constant Bus

所以在某些时候你必须声明class Busmodule Bus 。 虽然每次都不一定是完整的层次结构。

我倾向于早期要求设置命名空间,然后在我的其余文件中使用更精简的forms。 我不知道有任何首选方法 – 绝对不会让你受到批评。

当您将多个类的模块分布在项目中的多个文件中时,首选语法; 并且提供的module始终在PATH定义。 如,制作gem

第二个是更重要的,应该在涉及细节时完成。 module不仅包含class ,还包括命名空间的methodsconstants等; 这很有用。