繁体   English   中英

Ruby / Rails中的常量定义

[英]Constant definition in Ruby/Rails

我的rails应用程序中的config/initializers/my_config.rb下有initializers config程序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语法的重要性是什么?

部分原因似乎与rails hot code reloading有关 ,它有很多警告。 如果您不使用热代码重载, MyModule要先定义MyModuleAB的等效性就更高。

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

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

不同之处在于代码A引发语法错误,而代码B则语法错误。 除非事先定义,否则代码B将为MyModule引发名称错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM