Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby模块声明_Ruby - Fatal编程技术网

Ruby模块声明

Ruby模块声明,ruby,Ruby,这样做有什么区别吗 class Bus::Driver end 及 如果不是,首选哪种语法 做[…]有什么区别吗 唯一的区别是,在class Bus::Driver中,必须定义Bus模块,而这并不代表第二个模块 首选哪种语法 这不是一个建设性的问题,但我个人更喜欢第二个问题,因为它明确指出,Bus是一个模块,而对于第一个问题,我一眼就看不出Bus是一个模块还是一个类 class Bus::Driver end 将导致错误NameError:未初始化的常量总线 因此,在某些时候,您必须声明类总

这样做有什么区别吗

class Bus::Driver
end

如果不是,首选哪种语法

做[…]有什么区别吗

唯一的区别是,在
class Bus::Driver
中,必须定义
Bus
模块,而这并不代表第二个模块

首选哪种语法

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

class Bus::Driver
end
将导致错误
NameError:未初始化的常量总线

因此,在某些时候,您必须声明
类总线
模块总线
。但它不必每次都是完整的层次结构


我倾向于提前要求设置名称空间,然后在我的其余文件中使用更精简的形式。我不知道有任何首选的方法-肯定没有什么会批评你的。

当你在一个项目中有一个模块的不同类分布在多个文件中时,首选第一种语法;所提供的
模块
始终在
路径
中定义。例如,在制作
gem


第二个更为核心,在涉及细节时应该这样做<代码>模块不仅包括
,还包括
方法
常量
等命名空间;它们很有用。

当涉及继承时,这些声明之间还有一个额外的区别:

让我们假设
Driver
继承自
Person

class Bus::Driver < Person
end
class总线::司机
模块总线
等级司机<人
结束
结束
当Ruby试图解析
Person
常量时,它在第一个声明中只查找
::Person
。第二个函数同时查找
Bus::Person
::Person

根据您的情况,这可能会使一个声明比另一个更受欢迎

class Bus::Driver < Person
end
module Bus
  class Driver < Person
  end
end