ジョギング
日課
- (腕立て x 50 + 腹筋 x 50) x 3
奥さん
- 少し元気になったようで良かった
明日は
に参加する予定.
今日のるびぃ ~ REx - Ruby Examination にチャレンジ (26) ~
REx - Ruby Examination の問題を自分なりにアレンジした上で 1 〜 3 問くらいずつ解いていく. 正直言ってかなり難しい. 尚, irb に動作確認環境は以下の通り.
$ ruby --version ruby 2.1.10p492 (2016-04-01 revision 54464) [x86_64-linux] $ irb --version irb 0.9.6(09/06/30)
定数参照
以下のコードを実行するとどうなるか.
class C CONST = "AAA" end module M CONST = "BBB" end module M class C CONST = "CCC" end end module M class C p CONST end end
CCC と表示される
以下, irb にて確認.
irb(main):001:0> class C irb(main):002:1> CONST = "AAA" irb(main):003:1> end => "AAA" irb(main):004:0> irb(main):005:0* module M irb(main):006:1> CONST = "BBB" irb(main):007:1> end => "BBB" irb(main):008:0> irb(main):009:0* module M irb(main):010:1> class C irb(main):011:2> CONST = "CCC" irb(main):012:2> end irb(main):013:1> end => "CCC" irb(main):014:0> irb(main):015:0* module M irb(main):016:1> class C irb(main):017:2> p CONST irb(main):018:2> end irb(main):019:1> end "CCC" => "CCC"
以下, 解説より抜粋.
- 設問では, ネストされた class C の定数 CONST を参照している
- トップレベルの class C とネストされた class C では, 定数 CONST の内容は異なる
尚, トップレベル class C の定数を参照したい場合には, 以下のような方法で参照する.
irb(main):020:0> module M irb(main):021:1> class ::C irb(main):022:2> p CONST irb(main):023:2> end irb(main):024:1> end "AAA" => "AAA" irb(main):025:0> class Object irb(main):026:1> class C irb(main):027:2> p CONST irb(main):028:2> end irb(main):029:1> end "AAA" => "AAA"
クラス, モジュールのネスト状態を確認する場合, Module.nesting
を利用する.
irb(main):001:0> class C irb(main):002:1> p Module.nesting irb(main):003:1> end [C] => [C] irb(main):004:0> irb(main):005:0* module M irb(main):006:1> class C irb(main):007:2> p Module.nesting irb(main):008:2> end irb(main):009:1> end [M::C, M] => [M::C, M]
上記のように, クラスやネストの状態が出力される.
フムフム.