定数がすでに定義されているかどうかを確認します


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クラスのメソッドであり、定数がそのモジュールとその祖先(オプション)で定義されているかどうかを示します。いくつかの例については、ドキュメントを確認してください— ruby-doc.org/core-1.9.3/Module.html#method-i-const_defined-3F
jibiel


この回答に感謝します..ブール値で|| =確実に使用できないための優れた回避策
Chuck van der Linden

これは、定数だけでなく、メソッドにも最適です。
Joshua Pinter 2018年

25

const_defined?API

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

1
これは、これが動的な方法で定義されているかどうかを確認するときに特に役立ちます。
DickieBoy 2017

4
CONST ||= :default_value

上記はruby1.9.3で機能しますが、1.8では失敗します...まあ1.8は今では古代です。


:) 1.8は古いかもしれませんが、2017年もまだ使用されています。例:Dreamhost共有ホスティング。
manitu 2017年

ほとんどのプロジェクトはすでにruby1.8のサポートを終了しているようです。「サポートされている」ruby1.8バージョンがまだあることを知っています。たとえば、Red Hat EnterpriseLinuxで出荷されています。彼らはセキュリティパッチを取得していますが、インストールされているアプリケーションで使用されている古いgemバージョンの多くの未知のセキュリティ欠陥にさらされています。そうです、ありますが、ほとんどの人にとっては無関係です。XPを実行しているコンピューターが長い間存在し、今後も存在するように(最近、そのようなATMが再び発見されました)。
akostadinov 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.