상수가 이미 정의되어 있는지 확인


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)

답변:


133
CONST = 2 unless defined? CONST

멋진 연산자에 대한 자세한 내용은 여기 를 참조 하세요defined? .

PS 그리고 미래에 당신이 원하는 것 같아요 var ||= 1대신 var = var||1.


6
또한 const_defined?있지만 그것은 나를 위해 작동하지 않습니다. 이유를 모르겠습니다.
Jared Beck

8
const_defined?Module클래스 의 메서드이며 상수가 해당 모듈과 해당 조상 (선택 사항)에 정의되어 있는지 여부를 알려줍니다. 몇 가지 예를 보려면
jibiel


부울 안정적으로 = || 사용할 수없는이 답변을 주셔서 감사합니다 .. 좋은 해결 방법
척 반 데르 린든

이것은 상수뿐만 아니라 메서드에서도 잘 작동합니다.
Joshua Pinter는


4
CONST ||= :default_value

위의 내용은 루비 1.9.3에서는 작동하지만 1.8에서는 실패합니다. 이제 1.8은 오래되었습니다.


:) 1.8은 오래되었지만 2017 년에도 여전히 사용되고 있습니다. 예 : Dreamhost 공유 호스팅.
manitu

대부분의 프로젝트는 이미 루비 1.8에 대한 지원을 중단했습니다. 예를 들어 Red Hat Enterprise Linux에서 제공하는 "지원되는"루비 1.8 버전이 여전히 있다는 것을 알고 있습니다. 그들은 보안 패치를 받고 있지만 어떤 응용 프로그램이 설치 되든 사용되는 이전 gem 버전에서 알려지지 않은 많은 보안 결함에 노출됩니다. 그렇습니다.하지만 대부분의 사람들에게는 관련이 없습니다. XP를 실행하는 컴퓨터가 있고 앞으로도있을 것입니다 (최근에 그런 ATM을 다시 발견했습니다).
akostadinov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.