[英]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
要先定义MyModule
, A和B的等效性就更高。
但是,在重新加载代码(尤其是定义MyModule
的文件)时,它可能最终会覆盖现有模块,并且不会运行B行。
但是主要区别在于, A不依赖于项目中其他代码的加载/运行方式,而B必须在某些代码之后运行。
不同之处在于代码A引发语法错误,而代码B则语法错误。 除非事先定义,否则代码B将为MyModule
引发名称错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.