ようへいの日々精進XP

よかろうもん

2018 年 04 月 05 日(木)

ジョギング

  • 香椎浜 x 2 周
  • 背中に張りを感じつつ走る

日課

  • お休み

平尾の板場 白雪

www.itaba-sirayuki.com

両親が年に二回くらいのドライブ旅の途中で福岡に立ち寄ったので, 平尾の「白雪」で夕飯を食べる. お出汁がとても印象的でとても美味しかった. 少しお高いけど, また行きたいお店がまたひとつ増えた.

両親

父の咳が気になったが, それ以外はとても元気で和食をつつきながら色々と話が出来たので良かった. これからも元気で長生きして欲しい. あと帰りは佐賀に寄って帰るとのことなので, 気をつけて帰って欲しい.

今日のるびぃ ~ Ruby 技術者認定試験 Gold 演習問題を解いていく (16) ~

もう何度か解いているけど, Ruby 技術者認定試験合格教本 の演習問題と模擬試験を数問ずつ解いていく. ポイントは, 問題が何について問われているかがちゃんと理解出来ていること.

Q16. 標準添付ライブラリ

以下のコードを実行すると何が表示されるか.

require 'date'

d1 = DateTime.new
d2 = DateTime.new
p (d2 - d1).class
  1. Rational

以下, irb の実行例.

irb(main):001:0> require 'date'
=> true
irb(main):002:0> 
irb(main):003:0* d1 = DateTime.new
=> #<DateTime: -4712-01-01T00:00:00+00:00 ((0j,0s,0n),+0s,2299161j)>
irb(main):004:0> d2 = DateTime.new
=> #<DateTime: -4712-01-01T00:00:00+00:00 ((0j,0s,0n),+0s,2299161j)>
irb(main):005:0> p (d2 - d1).class
Rational
=> Rational

以下, 解説より抜粋.

irb(main):001:0> Time.now
=> 2018-04-05 07:47:03 +0900
irb(main):002:0> t1 = Time.now
=> 2018-04-05 07:47:17 +0900
irb(main):003:0> t2 = Time.now
=> 2018-04-05 07:47:25 +0900
irb(main):004:0> (t2 - t1).class
=> Float

Q17. オブジェクト指向

以下のコードを実行するとどうなるか.

module Mod
  def foo
    puts 'Mod'
  end
end

class Cls1
  def foo
    puts 'Cls1'
  end
end

class Cls2 < Cls1
  include Mod
  undef foo
end

Cls2.new.foo
  1. 例外発生

以下, irb による実行例.

irb(main):018:0* Cls2.new.foo
NoMethodError: undefined method `foo' for #<Cls2:0x0055d8cf798328>
        from (irb):18
        from /home/kappa/.rbenv/versions/2.1.10/bin/irb:11:in `<main>

以下, 解説より抜粋.

  • Cls1 クラスで定義された foo は, Cls2 クラスで undef により定義が取り消されている

と書かれているけど...

irb(main):019:0> Cls2.ancestors
=> [Cls2, Mod, Cls1, Object, Kernel, BasicObject

メソッド探索的には Mod#foo が呼ばるはずなので...

  • Mod モジュールで定義された foo は, Cls2 クラスで undef により定義が取り消されている

の方が適切なのでは...

Q18. 文法

以下のコードと同じ実行結果になるコードはどれか.

a, b = [1, 2]

以下のコードと同等.

a = 1
b = 2

以下, irb での実行例.

irb(main):001:0> a, b = [1, 2]
=> [1, 2]
irb(main):002:0> p a
1
=> 1
irb(main):003:0> p b
2
=> 2

以下, 解説より抜粋.

  • 配列の多重代入
  • 左辺には, 右辺の同じ位置にある値が代入さえる

その他のパターン.

irb(main):004:0> a, *b = [1, 2, 3]
=> [1, 2, 3]
irb(main):005:0> p a
1
=> 1
irb(main):006:0> p b
[2, 3]
=> [2, 3]

フムフム