定数
アルファベット大文字 ( [A-Z]
) で始まる識別子は定数として扱われる。定数の定義 (と初期化) は代入によって行われる。
ドキュメント:
定数 – 変数と定数 | Ruby リファレンスマニュアル [公式]
概要
- アルファベット大文字 (
[A-Z]
) で始まる識別子は定数として扱われる。定数の定義 (と初期化) は代入によって行われる。メソッドの中では定数は定義できない。 - 一度定義された定数に再び代入を行おうとすると警告が出力される。定義されていない定数にアクセスすると
NameError
例外が発生する。 - 定数はその定義されたクラス/モジュール内 (メソッドやネストしたクラス/モジュールを含む) から参照できる。
- トップレベル (クラス定義の外) で定義された定数は
Object
に所属する。 - あるクラスまたはモジュールで定義された定数を外部から参照するには
::
演算子を用いる。また、トップレベルの定数 (Object
クラスで定義されている定数) を確実に参照するためには左辺無しの::
演算子を用いる。
参考:
Ruby の定数、もうひとつの意外な仕様 | アインシュタインの電話番号
定数 – 変数と定数 | Ruby リファレンスマニュアル [公式]
Everything You Need to Know About Ruby Constants | RubyGuides
const_defined?
定数が定義されているか確認する
mod.const_defined?(name)
Code language: Ruby (ruby)
参考:
Ruby で名前空間が定義されているか確認する方法 – Qiita
Module#const_defined? | Ruby リファレンスマニュアル [公式]
Check if a constant is already defined – Stack Overflow
How to check if a constant is defined by its symbol in Ruby? – Stack Overflow
const_get
文字列やシンボルから定数を取得する
mod.const_get(name)
Code language: Ruby (ruby)
参考:
Module#const_get | Ruby リファレンスマニュアル [公式]
クラス名の文字列からクラスを取得する方法 | present
ruby で動的にクラス名を使いたいときは Object.const_get つかうらしい | hiroyukim
Ruby の Module#const_get について調べてみた | freedom-man
const_defined? / const_get の罠 | CLARA ONLINE techblog
Ruby で文字列をクラス名として扱うには? – QA@IT
const_set
参考:
Module#const_set | Ruby リファレンスマニュアル [公式]
remove_const
指定した定数を取り除く。定数に設定されていた値を返す。
mod.remove_const(name)
Code language: Ruby (ruby)
参考:
Module#remove_const | Ruby リファレンスマニュアル [公式]
Ruby で定義したクラスを忘れさせる | IwazerReport
constants
mod.constants
Code language: Ruby (ruby)
クラスあるいはモジュールで定義されている定数の一覧を配列にして返す。親クラスやインクルードしたモジュールの定数も含まれる。
参考:
Module.constants | Ruby リファレンスマニュアル [公式]
const_missing
参考:
Module#const_missing | Ruby リファレンスマニュアル [公式]
子クラスの定数を参照する
参考:
Ruby の子クラスで定数を再定義したのに親の定数が参照されちゃう | TakiTake の日記
定数の定義場所を調べる
参考:
Ruby で class や const の定義位置を調べる方法 – Qiita
How do I find where a constant is defined in Ruby? – Stack Overflow
定数の定義/読み込みと探索
参考:
Ruby loading and requiring files, constant name resolution | NopeCode
Ruby constant lookup: The good, the bad and the ugly | makandra dev