检查是否已定义常量


82

我希望这是一个简单的方法。在下面的示例中,如何检查常量是否已定义?

#this works
var = var||1
puts var
var = var||2
puts var

#this doesn't
CONST = CONST||1
puts CONST
CONST = CONST||2
puts CONST

=> 1
   1
   uninitialized constant CONST (NameError)

Answers:


133
CONST = 2 unless defined? CONST

有关出色的运算符,请参见此处defined?

PS并且将来我想你会想要var ||= 1代替var = var||1


6
还有,const_defined?但对我不起作用;不知道为什么。
杰瑞德·贝克

8
const_defined?Module类的方法,它将告诉您是否在该模块及其祖先中定义了常量(可选)。检查文档中的一些示例-ruby-doc.org/core-1.9.3/Module.html#method-i-const_defined-3F
jibiel 2013年


感谢您提供此答案..很棒的解决方法,因为无法可靠地使用|| =布尔值
Chuck van der Linden'Aug

这不仅适用于常量,还适用于方法。
Joshua Pinter


4
CONST ||= :default_value

上面的代码对我适用于ruby 1.9.3,但对1.8不适用... 1.8现在已经很古老了。


:) 1.8可能很古老,但仍在2017年使用,例如:Dreamhost共享托管。
manitu

我看到大多数项目已经放弃了对ruby 1.8的支持。我知道仍然有“受支持的” ruby​​ 1.8版本,例如Red Hat Enterprise Linux附带的版本。他们正在获得安全补丁,但是在任何安装的应用程序中使用的旧gem版本中都暴露出许多未知的安全漏洞。是的,确实存在,但对大多数人来说无关紧要。就像现在一样,并且将有很长一段时间运行XP的计算机(最近才发现这种ATM)。
akostadinov
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.