これは単純なものだと思います。次の例で、定数がすでに定義されているかどうかを確認するにはどうすればよいですか?
#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)
回答:
CONST = 2 unless defined? CONST
素晴らしいオペレーターの詳細については、こちらをご覧くださいdefined?
。
PSそして将来的にはあなたがvar ||= 1
代わりに欲しいと思うでしょうvar = var||1
。
const_defined?
はModule
クラスのメソッドであり、定数がそのモジュールとその祖先(オプション)で定義されているかどうかを示します。いくつかの例については、ドキュメントを確認してください— ruby-doc.org/core-1.9.3/Module.html#method-i-const_defined-3F
pry> User.const_defined?("PER_PAGE")
=> true
pry> User.const_defined?("PER_PAGE123")
=> false
CONST ||= :default_value
上記はruby1.9.3で機能しますが、1.8では失敗します...まあ1.8は今では古代です。
const_defined?
、私にはうまくいきません。理由はわかりません。