ようへいの日々精進XP

よかろうもん

2018 年 07 月 10 日 (火)

ジョギング

  • 香椎浜 x 2 周
  • なんかギクシャクした感じがずーっと続いている
  • 右足に強い張り

日課

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

夕飯

  • 適当に冷製パスタを作った
  • 適当な割には美味しかった

今日のるびぃ ~ Ruby 技術者認定試験合格教本 (Silver/Gold 対応) Ruby 公式資格教科書 模擬試験 (1) ~

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 A
  $a = self
  def foo
    $b = self
  end
end

a = A.new
print A == $a, A.new == $b

以下, 解答.

  1. truefalse が表示される

以下, irb にて確認.

irb(main):001:0> class A
irb(main):002:1>   $a = self
irb(main):003:1>   def foo
irb(main):004:2>     $b = self
irb(main):005:2>   end
irb(main):006:1> end
=> :foo
irb(main):007:0> 
irb(main):008:0* a = A.new
=> #<A:0x005605a2273c58>
irb(main):009:0> print A == $a, A.new == $b
truefalse=> nil
  • クラス定義中の self は, そのクラスオブジェクトとなる
  • インスタンスメソッド中の self は, そのクラスのオブジェクトとなる
  • $a には クラス A が代入されるが, $b は, メソッド foo が実行されなければ値は代入されない為, nil となる

両方が true になるパターン.

irb(main):001:0> class A
irb(main):002:1>   $a = self
irb(main):003:1>   def foo
irb(main):004:2>     $b = self
irb(main):005:2>   end
irb(main):006:1> end
=> :foo
irb(main):007:0> a = A.new
=> #<A:0x0055c380ca0c08>
irb(main):008:0> print A == $a
true=> nil
irb(main):009:0> print A.new.foo == $b
true=> nil

DateTime 同士の演算

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

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> d1 = DateTime.new
=> #<DateTime: -4712-01-01T00:00:00+00:00 ((0j,0s,0n),+0s,2299161j)>
irb(main):003:0> d2 = DateTime.new
=> #<DateTime: -4712-01-01T00:00:00+00:00 ((0j,0s,0n),+0s,2299161j)>
irb(main):004:0> p (d2 - d1).class
Rational
=> Rational

以下, 解説より抜粋.

以下, ドキュメントより抜粋.

  • DateTimeDate クラスのサブクラス
  • Date クラスは日付のみ
  • DateTime クラスは時刻も扱うことが出来る
irb(main):001:0> require 'date'
=> true
irb(main):002:0> a = DateTime.new(1993, 2, 24, 12, 30, 45)
=> #<DateTime: 1993-02-24T12:30:45+00:00 ((2449043j,45045s,0n),+0s,2299161j)>
irb(main):003:0> b = DateTime.parse('1993-02-24T12:30:45')
=> #<DateTime: 1993-02-24T12:30:45+00:00 ((2449043j,45045s,0n),+0s,2299161j)>
irb(main):004:0> b += 10
=> #<DateTime: 1993-03-06T12:30:45+00:00 ((2449053j,45045s,0n),+0s,2299161j)>
irb(main):005:0> (b - a)
=> (10/1)
irb(main):006:0> (b - a).class
=> Rational
irb(main):007:0> DateTime.now - 1
=> #<DateTime: 2018-07-02T09:23:19+09:00 ((2458302j,1399s,943836661n),+32400s,2299161j)>
irb(main):008:0> (DateTime.now - 1).class
=> DateTime

フムフム.