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 Bus
或module Bus
。 虽然每次都不一定是完整的层次结构。
我倾向于早期要求设置命名空间,然后在我的其余文件中使用更精简的forms。 我不知道有任何首选方法 – 绝对不会让你受到批评。
当您将多个类的模块分布在项目中的多个文件中时,首选语法; 并且提供的module
始终在PATH
定义。 如,制作gem
。
第二个是更重要的,应该在涉及细节时完成。 module
不仅包含class
,还包括命名空间的methods
和constants
等; 这很有用。