2012-04-16 61 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