2012-04-16 19 views
62

Mam nadzieję, że jest to prosta. Jak sprawdzić, w poniższym przykładzie, czy stała jest już zdefiniowana?Sprawdź, czy stała jest już zdefiniowana

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

Odpowiedz

105
CONST = 2 unless defined? CONST 

Zobacz here się więcej o niesamowitej defined? operatora.

P.S. I w przyszłości chyba będziesz chciał var ||= 1 zamiast var = var||1.

+0

dzięki, że działa! – peter

+5

Istnieje również 'const_defined?' Ale nie działa dla mnie; nie pewny dlaczego. –

+7

'const_defined?' Jest metodą klasy 'Module' i powie ci, czy stała jest zdefiniowana w tym module i jego przodkach (opcjonalnie). Sprawdź dokumenty na kilka przykładów - http://www.ruby-doc.org/core-1.9.3/Module.html#method-i-const_defined-3F – jibiel

3
CONST ||= :default_value 

powyższe prace dla mnie na Ruby 1.9.3, ale nie na 1,8 ... dobrze 1.8 jest teraz stara.

+0

:) 1.8 może być starożytny, ale nadal w użyciu w 2017 roku, przykład: host hosta dzielonego Dreamhost. – kitschmaster

+0

Widzę, że większość projektów już zmniejszyła wsparcie dla ruby ​​1.8. Wiem, że wciąż istnieją "obsługiwane" wersje Ruby 1.8, np. dostarczane przez Red Hat Enterprise Linux. Dostają łaty bezpieczeństwa, ale ujawnia się wiele nieznanych luk w zabezpieczeniach w starych wersjach klejnotów używanych w dowolnej aplikacji. Tak, jest, ale jest nieistotne dla większości ludzi. Tak, jak są i będą przez długi czas komputery z XP (niedawno wykryto taki bankomat). – akostadinov

11

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

+1

Jest to szczególnie pomocne podczas sprawdzania, czy jest to zdefiniowane w sposób dynamiczny. – DickieBoy

Powiązane problemy