Ruby / Rails中的常量定义

时间:2019-03-21 23:51:46

标签: ruby-on-rails ruby

我的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 语法有什么重要性?

2 个答案:

答案 0 :(得分:2)

部分原因似乎与导轨hot code reloading有关,其中有很多警告。如果您不使用热代码重载,则只要先定义MyModule A B 就更等效。

但是,当重新加载代码(尤其是定义MyModule的文件)时,它可能最终会覆盖现有模块,而不运行 B 行。

主要区别在于, A 不依赖于项目中其他代码的加载/运行方式,而 B 必须运行< 之后。

答案 1 :(得分:0)

区别在于代码A引发语法错误,而代码B语法。除非预先定义,否则代码B将为MyModule引发名称错误。