所有ruby文件都应该具有与文件夹结构匹配的模块结构吗?
所有文件都在具有文件夹结构(类似于java包)的模块中,这是ruby约定吗 例如,如果我有一个文件结构 lib/people/utils 此处的文件是否具有模块结构,例如:所有ruby文件都应该具有与文件夹结构匹配的模块结构吗?,ruby,module,idioms,Ruby,Module,Idioms,所有文件都在具有文件夹结构(类似于java包)的模块中,这是ruby约定吗 例如,如果我有一个文件结构 lib/people/utils 此处的文件是否具有模块结构,例如: module People module Utils # some functionality for People::Utils end end 我问这个问题的原因是因为我一直在阅读一些rails代码,似乎有几个文件在这样的文件结构中,但没有任何模块声明 我猜这将是这样的,您可以使用实用程序函
module People
module Utils
# some functionality for People::Utils
end
end
我问这个问题的原因是因为我一直在阅读一些rails代码,似乎有几个文件在这样的文件结构中,但没有任何模块声明
我猜这将是这样的,您可以使用实用程序函数,而不必包含People::Utils
ruby中是否有关于何时应该使用模块和何时不应该使用模块的约定?一般来说,将类和文件放在这样的结构中是个好主意,因为这样可以使人们更容易地将类的名称映射到其定义 但不这样做是有道理的(最终你可以随心所欲地构造你的代码)。我偶尔会这样做,当有很多小班都在处理同一件事时,我把它们放在一起
有一个不定义模块或类的文件是有意义的,例如配置文件、二进制文件或引导文件(加载所有其他文件)。这是Rails中的标准文件。Rails加载模型的方式是通过查看文件夹结构来猜测类的位置。我们有所谓的
自动加载路径
您可以通过调用rails控制台
来找到它们(这有点老套,可能有更简单的方法来显示它们):
在config/application.rb
config块中,没有config.autoload_路径+=%W(#{config.root}/lib)
的默认Rails应用程序输出如下所示:
["/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"]
因此,如果您有app/models/something/util.rb
并且您在某个地方调用了something::util
,它将查找这些路径,找到app/models/
文件夹,其中包含something/util.rb
,并加载此文件
另一方面,鲁比并不在乎这个。在纯Ruby中自动加载的工作方式如上所述。您必须使用自动加载或直接要求文件(文件夹结构没有任何意义)。并在更高版本的Rails中列出自动加载路径:
Rails.application.instance\u variable\u get(:“@\u all\u Autoload\u path”)
["/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"]