2012-04-16 13 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が欲しいと思います。

+0

おかげで、! – peter

+5

'const_defined? 'もありますが、私にとってはうまくいきません。理由は分かりません。 –

+7

'const_defined?'は 'Module'クラスのメソッドであり、定数がそのモジュールとその祖先(オプション)で定義されているかどうかを示します。いくつかの例についてはドキュメントをチェックしてください - http://www.ruby-doc.org/core-1.9.3/Module.html#method-i-const_defined-3F – jibiel

3
CONST ||= :default_value 

ルビー1.9.3上の私のために上記の作品が、1.8に失敗した...よく1.8は現在、古代のです。作品

+0

:) 1.8は古代かもしれませんが、2017年にはまだ使用中です:例:Dreamhostはホスティングを共有しました。 – kitschmaster

+0

私はほとんどのプロジェクトが既にruby 1.8のサポートを落としているのを見ています。まだサポートされているRuby 1.8のバージョンがあることはわかっています。 Red Hat Enterprise Linuxに同梱されています。彼らはセキュリティパッチを入手していますが、インストールされているアプリケーションに関係なく、古い宝石のバージョンでは未知のセキュリティ欠陥が多数あります。 はい、ありますが、ほとんどの人にとっては無関係です。 XPが稼動しているコンピュータは長い間存在しています(ちょうど最近このようなATMを発見したばかりです)。 – akostadinov

11

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

+1

これは、動的に定義されているかどうかを確認する場合に特に役立ちます。 – DickieBoy

関連する問題