Jef*_*rey 9 ruby idioms module
是否所有文件的ruby约定都在具有文件夹结构的模块中(类似于java包)?
例如,如果我有一个看起来像的文件结构
LIB /人/ utils的
这里的文件是否具有模块结构,例如:
module People
module Utils
# some functionality for People::Utils
end
end
Run Code Online (Sandbox Code Playgroud)
我问的原因是因为我一直在阅读一些rails代码,并且似乎有几个文件在这样的文件结构中,但没有任何模块声明.
我猜这将是如此,你可以使用实用功能,而不必包括People::Utils.
在ruby中是否有关于何时应该使用模块以及何时不应该使用模块的约定?
Ped*_*nto 15
它是Rails的标准.Rails加载模型的方法是查看文件夹结构以猜测类的位置.我们有所谓的autoload_paths.
您可以通过调用来找到它们rails console(这有点hacky,可能有一种更简单的方式来显示它们):
app.instance_variable_get(:"@app").instance_variable_get(:"@_all_autoload_paths")
Run Code Online (Sandbox Code Playgroud)
默认的Rails应用程序输出,不在config.autoload_paths += %W(#{config.root}/lib)您的config/application.rb配置块中,如下所示:
["/Users/lunks/Code/rsvp/app/assets",
"/Users/lunks/Code/rsvp/app/controllers",
"/Users/lunks/Code/rsvp/app/helpers",
"/Users/lunks/Code/rsvp/app/mailers",
"/Users/lunks/Code/rsvp/app/models"]
Run Code Online (Sandbox Code Playgroud)
所以,如果你有app/models/something/util.rb并且你在Something::Util某个地方打电话,它会调查这些路径,找到app/models/文件夹something/util.rb并加载它.
另一方面,Ruby并不关心这一点.纯Ruby中的自动加载工作如本页所述.您必须使用自动加载或直接需要文件(文件夹结构不会有任何意义).
将类和文件放在这样的结构中通常是一个好主意,因为这将使人们更容易将类的名称映射到其定义。
但不这样做也是有意义的(最终您可以根据自己的喜好构建代码)。当有很多小班都在处理同一件事时,我偶尔会这样做,我把它们放在一起。
拥有一个未定义模块或类的文件是有意义的,例如配置文件、二进制文件或引导文件(加载所有其他文件的文件)。
| 归档时间: |
|
| 查看次数: |
4792 次 |
| 最近记录: |