ジョギング
- 香椎浜 x 2 周
- 右足の太ももの前に痛み
- 右半身と左半身のバランスが悪い感じ
日課
- お休み
夕飯
- パスタを作る
今日のるびぃ ~ Ruby 技術者認定試験合格教本 (Silver/Gold 対応) Ruby 公式資格教科書 模擬試験 (3) オブジェクト指向系問題 (2) ~
irb に動作確認環境は以下の通り.
$ ruby --version ruby 2.1.10p492 (2016-04-01 revision 54464) [x86_64-linux] $ irb --version irb 0.9.6(09/06/30)
オブジェクト指向 (4)
以下のコードを実行するとどうなるか.
class A @@x = 0 class << self @@x = 1 def x @@x end end def x @@x = 2 end end class B < A @@x = 3 end p A.x
以下, 解答.
3 が表示される
以下, irb による確認.
irb(main):001:0> class A irb(main):002:1> @@x = 0 irb(main):003:1> class << self irb(main):004:2> @@x = 1 irb(main):005:2> def x irb(main):006:3> @@x irb(main):007:3> end irb(main):008:2> end irb(main):009:1> def x irb(main):010:2> @@x = 2 irb(main):011:2> end irb(main):012:1> end => :x irb(main):013:0> irb(main):014:0* class B < A irb(main):015:1> @@x = 3 irb(main):016:1> end => 3 irb(main):017:0> irb(main):018:0* p A.x 3 => 3
以下, 解説より抜粋.
- クラス変数は, スーパークラスとサブクラス間で共有される
- 設問では, クラス B の
@@x = 3
が変数x
の最終定義になる
オブジェクト指向 (5)
以下の実行結果になるように, [ x ] に記述する適切なコードを選ぶ.
# コード module M def hoge puts 'hoge' end end class A [ x ] M end A.hoge # 実行結果 hoge
以下, 解答.
extend
以下, irb による確認.
irb(main):001:0> module M irb(main):002:1> def hoge irb(main):003:2> puts 'hoge' irb(main):004:2> end irb(main):005:1> end => :hoge irb(main):006:0> irb(main):007:0* class A irb(main):008:1> extend M irb(main):009:1> end => A irb(main):010:0> irb(main):011:0* A.hoge hoge => nil
以下, 解説より抜粋.
- モジュール内のメソッドをクラスメソッドとして取り込むには
extend
を用いる
オブジェクト指向 (6)
以下のコードを実行するとどうなるか.
class A $a = self def hoge $b = self end end a = A.new print A == $a, A.new == $b
以下, 解答.
truefalse が出力される
以下, irb による確認.
irb(main):001:0> class A irb(main):002:1> $a = self irb(main):003:1> def hoge irb(main):004:2> $b = self irb(main):005:2> end irb(main):006:1> end => :hoge irb(main):007:0> irb(main):008:0* a = A.new => #<A:0x00559d516cbcb0> irb(main):009:0> print A == $a, A.new == $b truefalse=> nil
以下, 解説より抜粋.
- クラス定義中の
self
は, そのクラスオブジェクトである - インスタンスメソッド中の
self
は, そのクラスのオブジェクトである $a
にはクラス A が代入され,$b
はhoge
が実行されなければ値は代入されないのでnil
となる
truetrue
と出力される為には, 以下のように実行する.
irb(main):010:0> print A == $a, A.new.hoge == $b truetrue=> nil
フムフム.