我的initializers config
下的rails应用程序中有config/initializers/my_config.rb
。
两者之间有什么区别
A:
module MyModule
Config = "path/to/config.yml"
end
和:
B:
MyModule::Config = "path/to/config.yml"
让我们假设一些请求,更改其实现,然后再次运行该应用程序。如果我以 B 方式定义常量,则会出现错误:
uninitialized constant MyModule::Config
仅当我重新启动Rails服务器时,它将解决。但是当我执行 A 方式时,它在更新代码时仍然可以识别常量。
在这种情况下使用 A 语法有什么重要性?
答案 0 :(得分:2)
部分原因似乎与导轨hot code reloading有关,其中有很多警告。如果您不使用热代码重载,则只要先定义MyModule
, A 和 B 就更等效。
但是,当重新加载代码(尤其是定义MyModule
的文件)时,它可能最终会覆盖现有模块,而不运行 B 行。
主要区别在于, A 不依赖于项目中其他代码的加载/运行方式,而 B 必须运行< 之后。
答案 1 :(得分:0)
区别在于代码A引发语法错误,而代码B语法。除非预先定义,否则代码B将为MyModule
引发名称错误。