- use the Ruby built-in: defined? It works for constants, methods, classes, etc.
There is no better among these two choices. Choosing which one depends on the user case. The second way specifies the scope to check if the constant exists, while the first way will seek for this constant through the ancestor trees. If you defines two constants with the same name but different values, you’d better use the 2nd way.
- scope of constants:Ruby searches for the constant definition in this order:
- The enclosing scope
- Any outer scopes (repeat until top level is reached)
- Included modules
class C X = 1 module M X = 2 class D X = 3 puts X # => 3 puts C::X # => 1 puts C::M::X # => 2 puts M::X # => 2 end end end