ジョギング
- 夕方の涼しい時間帯で香椎浜 x 3 周
- テンポよく走れた気がする
日課
- (腕立て x 50 + 腹筋 x 50) x 3
とんだ休日
- 新宮の美味しいパン屋さんにドライブがてら出掛けたが定休日...
- そして, 竹林亭に向かうも大行列... 30 分くらいで自宅に戻ってきた
- 結局, 自宅ちかくのビストロでハンバーグランチを食べて休日は終わった
- 暑い日は自宅でエアコン付けてのんびりする, 連休最終日は近場よりも自宅でゆっくり過ごすということを夫婦で再認識した
今日のるびぃ ~ Ruby 技術者認定試験合格教本 (Silver/Gold 対応) Ruby 公式資格教科書 模擬試験 (6) オブジェクト指向系問題 (5) ~
irb に動作確認環境は以下の通り.
$ ruby --version ruby 2.1.10p492 (2016-04-01 revision 54464) [x86_64-linux] $ irb --version irb 0.9.6(09/06/30)
オブジェクト指向 (13)
以下のコードを実行するとどうなるか. 全て選ぶ.
module Mod def foo puts 'Mod' super end end class Cls1 def foo puts 'Cls1' end end class Cls2 < Cls1 prepend Mod end Cls2.new.foo
以下, 解答.
Mod と表示 Cls1 と表示
以下, irb にて確認.
irb(main):001:0> module Mod irb(main):002:1> def foo irb(main):003:2> puts 'Mod' irb(main):004:2> super irb(main):005:2> end irb(main):006:1> end => :foo irb(main):007:0> irb(main):008:0* class Cls1 irb(main):009:1> def foo irb(main):010:2> puts 'Cls1' irb(main):011:2> end irb(main):012:1> end => :foo irb(main):013:0> irb(main):014:0* class Cls2 < Cls1 irb(main):015:1> prepend Mod irb(main):016:1> end => Cls2 irb(main):017:0> irb(main):018:0* Cls2.new.foo Mod Cls1 => nil
以下, 解説より抜粋.
- prepend で取り込まれたメソッドは, 元から定義されているメソッドよりも先に呼び出される
- prepend で呼び出されたモジュール内で super を呼び出すと, スーパークラスの同名メソッドが呼び出される
オブジェクト指向 (14)
以下のコードを実行するとどうなるか.
module Mod def foo puts 'Mod' end end class Cls1 def foo puts 'Cls1' end end class Cls2 < Cls1 include Mod end Cls2.new.foo
以下, 解答.
Mod と表示
- include しているモジュールのメソッドは, スーパークラスのメソッドよりも優先して実行される
オブジェクト指向 (15)
以下の実行結果になるように, [ x ] に記述する適切なコードを全て選ぶ.
# コード class Hoge [ x ] end Hoge.method1 # 実行結果 Hello, World.
以下, 解答.
# 解答 1 def self.method1 puts 'Hello, World.' end # 解答 2 class << self def method1 puts 'Hello, World.' end end
以下, irb にて確認.
# 解答 1 irb(main):001:0> class Hoge irb(main):002:1> def self.method1 irb(main):003:2> puts 'Hello, World.' irb(main):004:2> end irb(main):005:1> end => :method1 irb(main):006:0> Hoge.method1 Hello, World. => nil # 解答 2 irb(main):007:0> class Hoge irb(main):008:1> class << self irb(main):009:2> def method1 irb(main):010:3> puts 'Hello, World.' irb(main):011:3> end irb(main):012:2> end irb(main):013:1> end => :method1 irb(main):014:0> Hoge.method1 Hello, World. => nil
クラスメソッドの正しい定義方法.
# 定義方法 1 class Hoge def self.method1; end end # 定義方法 2 class Hoge class << self def method1; end end end
フムフム.