ようへいの日々精進XP

よかろうもん

2018 年 06 月 12 日 (火)

ジョギング

  • 自宅→香椎神宮香椎浜
  • 引き続き, 右足 (右腰から右足全体) にかけて痛み... 日に日にひどくなる感じ

日課

  • (腕立て x 50 + 腹筋 x 50) x 3

奥さん

  • 少し元気になったようで良かった

明日は

fukuokarb.connpass.com

に参加する予定.

今日のるびぃ ~ 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]

上記のように, クラスやネストの状態が出力される.

フムフム.