我正在运行一些Ruby代码,每次日期更改时都会破坏Ruby文件.在文件中,我有不断的定义,比如
Tau = 2 * Pi
Run Code Online (Sandbox Code Playgroud)
当然,它们使解释器每次都显示不需要的"已初始化的常量"警告,所以,我想要具备以下功能:
def_if_not_defined(:Tau, 2 * Pi)
redef_without_warning(:Tau, 2 * Pi)
Run Code Online (Sandbox Code Playgroud)
通过编写我的所有常量定义,我可以避免警告:
Tau = 2 * Pi unless defined?(Tau)
Run Code Online (Sandbox Code Playgroud)
但它不够优雅,有点潮湿(不是干).
有更好的方法def_if_not_defined吗?怎么样redef_without_warning?
-
谢谢Steve的解决方案:
class Object
def def_if_not_defined(const, value)
mod = self.is_a?(Module) ? self : self.class
mod.const_set(const, value) unless mod.const_defined?(const)
end
def redef_without_warning(const, value)
mod = self.is_a?(Module) ? self : self.class
mod.send(:remove_const, const) if mod.const_defined?(const)
mod.const_set(const, value)
end
end
A = 1
redef_without_warning :A, 2
fail 'unit test' unless A == …Run Code Online (Sandbox Code Playgroud)