::Object を使った定数のややこしい参照方法

「初めてのRuby」の「8章 オブジェクトとクラス」の p.153 に
「トップレベル」という項目がある。
ここにちょっとややこしい定数の参照方法がのっていた。


今、以下のような Duration クラスがあったとして

class Duration
  DAYS_OF_WEEK = 7
end

このクラスの持つ定数を参照するには通常

Duration::DAYS_OF_WEEK

とすればよい。


しかし、こんな書き方もできるようだ。

::Object::Object::Duration::Object::Duration::DAYS_OF_WEEK

「::Object」というのはトップレベルの Object を表す表記なのだけど
それが分かってもすぐには上の意味が掴めないんじゃなかろうか。
僕は掴めなかった(´・ω・`)


「::Object::Object」は、トップレベルの Object から
トップレベルの Object を見ているので「::Object」と1回書いたのと意味は同じだ。
もし「::Object::Object::Object」と3回書いても同じである。
そしてそのことから「::Object::Object::Duration::Object」も
「::Object」と同じであることが分かる。


つまり、上の長ったらしい表記は「::Duration::DAYS_OF_WEEK」と同じなのだ。
分かるまではややこしいなぁ意味わかんねーとか思ってたけど
分かってみるとなんてことない。