2012-04-16 150 views
62

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

#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) 

回答

105
CONST = 2 unless defined? CONST 

更多有关真棒defined?操作请参见here

P.S.而在未来,我想你会想要var ||= 1而不是var = var||1

+0

感谢,这作品! – peter 2012-04-16 10:11:03

+5

还有'const_defined?'但它不适用于我;不知道为什么。 – 2013-06-05 22:46:33

+7

'const_defined?'是'Module'类的一个方法,它会告诉你该常量是否在该模块及其祖先(可选)中定义。查看文档中的一些示例 - http://www.ruby-doc.org/core-1.9.3/Module.html#method-i-const_defined-3F – jibiel 2013-06-08 21:01:03

3
CONST ||= :default_value 

上述作品我的红宝石1.9.3,但未能在1.8 ... 1.8以及现在古。

+0

:) 1.8可能是古老的,但仍在2017年使用,例如:Dreamhost共享主机。 – kitschmaster 2017-01-30 16:00:00

+0

我看到大多数项目已经放弃了对Ruby 1.8的支持。我知道还有“支持”的ruby 1.8版本,例如由红帽企业Linux运送。他们正在获得安全补丁,但有一个暴露在安装任何应用程序时使用的旧版宝石中的许多未知安全漏洞。 所以是的,这对大多数人来说是存在的,但并不相关。就像现在和将来会有很长一段时间电脑运行XP(最近刚刚发现这样一台ATM)。 – akostadinov 2017-01-31 09:31:43

11

const_defined? API pry> User.const_defined?("PER_PAGE") => true pry> User.const_defined?("PER_PAGE123") => false

+1

当您检查是否以动态方式定义时,这特别有用。 – DickieBoy 2017-02-20 13:43:03