ようへいの日々精進XP

よかろうもん

2018 年 03 月 17 日(土)

ジョギング

  • 香椎浜 x 2 周 + 砂浜 = 45 分くらい
  • 左ひざの内側, 走り始めると多少は楽になる
  • 走るにはとても気持ちが良い天気だった

日課

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

ファミリーソング

www.youtube.com

Youtube で「ドラえもん」を聞いていたら, 勝手にこの曲が流れだして, すごくいい曲だなあと思ったので.

歌詞の一部を抜粋.

ただ 幸せが一日でも多く側にありますように 悲しみは 次のあなたへの橋となりますように

先日の生誕祭でとても喜んでくれた奥さんを思い出しながら, 奥さんの側に一日でも多く幸せがありますようにと思った次第.

奥さん生誕祭

  • 奥さんの誕生日祝いの本番, 香椎のオリーブでイタリアン
  • 久しぶりのオリーブだったけど, 18 時に予約していたんだけど, 既に半分以上席が埋まっていて, 相変わらずの盛況ぶり
  • 生ハム盛り合わせとアヒージョ, 豚肉のソテー, パスタで〆た... パスタが期待した程では無かったのが残念だった
  • オリーブの後はじゃんからで 1 時間

パラリンピックやってるのに

  • テレビの番組表見ても, 中継しているのは国営放送のみ (録画というバターンもあり)
  • 民放は軒並み, カーリングとかやんや取り上げて, もぐもぐタイムとかまだ言ってるし...馬鹿か, カーリングも, あと一ヶ月くらしたら何もなかったような扱いになるんだろうな

今日のるびぃ ~ Ruby 技術者認定試験 Gold を受験した方の記事を参考にして (2) ~

今日の参考

http://d.hatena.ne.jp/rightgo09_ruby/20121226/p1 を参考にさせて頂いた. 有難うございます.

継承した private メソッド

以下のように private メソッドを継承した場合.

class Foo
  private
  def foo
    'Private Foo#foo'
  end
end

class Bar < Foo
  def foo
    super
  end
end

サブクラスでは, 以下のようにレシーバ付きで呼び出すことが出来る.

[4] pry(main)> Bar.new.foo
=> "Private Foo#foo

Object クラス内での定数定義

Object クラスでの定数定義は, トップレベルで定数を定義するのと同義になる.

CONST = 123

class Object
  CONST = 234
end

CONST

以下, 実行例.

[1] pry(main)> CONST = 123
=> 123
[2] pry(main)> 
[3] pry(main)> class Object
[3] pry(main)*   CONST = 234  
[3] pry(main)* end  
(pry):3: warning: already initialized constant CONST
(pry):1: warning: previous definition of CONST was here
=> 234
[4] pry(main)> 
[5] pry(main)> CONST
=> 234

ほうほう.

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

  • アルファベット大文字 ([A-Z]) で始まる識別子は定数
  • 代入によって初期化されるが, メソッド内では定義出来ない, 初期化していない定数にアクセスすると NameError が発生する
  • 再代入は警告が出る
  • クラス定義の外(トップレベル)で定義された定数は Object に所属する

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

  • 親クラスとネストの外側のクラスで同名の定数が定義されているとネストの外側の定数の方を先に参照
  • 定数の探索順序は, 最初にネスト関係を外側に向かって探索し, 次に継承関係を上位に向かって探索する
[1] pry(main)> class Foo
[1] pry(main)*   CONST = '123'  
[1] pry(main)* end  
=> "123"
[2] pry(main)> 
[3] pry(main)> class Bar < Foo
[3] pry(main)*   CONST = '456'  
[3] pry(main)*   class Baz < Foo  
[3] pry(main)*     p CONST    
[3] pry(main)*   end    
[3] pry(main)* end  
"456"
=> "456"
# 親クラスの定数は明示的に指定する必要がある
[4] pry(main)> Foo::CONST
=> "123"
  • トップレベルの定数定義はネストの外側とはみなされない

インスタンス変数のスコープ

以下のように, メソッドやクラスメソッドが混在する場合のインスタンス変数のスコープについて.

class Foo 
  @foo = 123
  def foo 
    @foo = 234
  end
  class << Foo
    @foo = 345
    def foo
      @foo
    end
  end
end

以下, 実行例.

[2] pry(main)> Foo.new.foo
=> 234
[3] pry(main)> Foo.foo
=> 123
[4] pry(main)> class << Foo
[4] pry(main)*   @foo
[4] pry(main)* end  
=> 345
[7] pry(main)> f = Foo.new
=> #<Foo:0x00005612fe62d948>
[8] pry(main)> class << f
[8] pry(main)*   @foo
[8] pry(main)* end  
=> nil

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

  • @ で始まる変数はインスタンス変数であり, 特定のオブジェクトに所属している
  • インスタンス変数はそのクラスまたはサブクラスのメソッドから参照可能
  • 初期化されていないインスタンス変数を参照すると nil が返る

ふむふむ.