bra*_*rad 29 ruby module ruby-on-rails
我想知道以下两个模块之间的区别
# First Example
module Parent
module Child
end
end
Run Code Online (Sandbox Code Playgroud)
和
# Second Example
module Parent::Child
end
Run Code Online (Sandbox Code Playgroud)
使用第二种方法,似乎必须事先定义父模块,否则我会得到一个'未初始化的常量'错误
鉴于此,定义诸如此类的模块的首选方法是什么,然后在语法和文件结构方面添加嵌套子代(即文件夹等).非常感谢参考Rails方式.
所有意图和目的的这两个例子是否相同?
Rya*_*igg 31
在第一个示例中,它定义Parent模块,然后定义Child模块.正如您自己所说,第二个示例必须事先Parent定义模块.以另外一行代码为代价,您可以确保始终使用第一个示例嵌套模块.
对于Rails示例,让我们查看railties/lib/rails/engine.rb文件,该文件重新打开Rails模块,然后在其中定义一个Engine类.这可以简单地完成:
class Rails::Engine
Run Code Online (Sandbox Code Playgroud)
但也许出于上述原因,也许为了清晰起见,首先定义模块,然后定义内部类.
hor*_*guy 13
我更喜欢第二种方法(如果我确定已经定义了Parent),因为它看起来更干净,尤其是 当筑巢很深.
然而,第一种方法有一些优点,尚未讨论的是嵌套模块可以访问封闭模块中任何词法可用的常量.
小智 7
一般来说,您不希望使用模块Parent :: Child语法定义模块,除非您可以绝对确定Parent已经存在.如果定义了父模块,则只能使用::语法定义子模块.在您的示例中,如果执行以下操作,则不会获得未初始化的常量错误.
module Parent
end
module Parent::Child
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11850 次 |
| 最近记录: |