ようへいの日々精進XP

よかろうもん

2018 年 02 月 23 日(金)

ジョギング

日課

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

クックックピザクック

  • 夕飯はピザだった
  • 生地の薄いタイプが美味しゅうございました

AWS メモ

  • Public アクセスが有効な RDS に同一 VPC 内の EC2 や Lambda からアクセスする場合には Private IP でアクセス出来る
  • VPC 上で起動した Amazon Elasticsearch Service ドメインから VPC 内の Lambda からサクッとアクセス出来た
  • 但し, Kibana については, ALB や ELB を使うか, EC2 を立てて, Kibana を別途インストールして Elasticsearch にアクセスさせるようにする必要がある...

今日のるびぃ ~ メソッド探索とか (2) ~

Mod1 を prepend で Mix-in (2)

prepend したモジュールで super を呼び出すと...

module Mod1
  def method1
    super
    p 'Mod1#method1'
  end
end

class Cls1
  def method1
    p 'Cls1#method1'
  end
end

class Cls2 < Cls1
  prepend Mod1
  def method1
    p 'Cls2#method1'
  end
end

Cls2.new.method1 
Cls2.ancestors

pry で実行例.

[7] pry(main)> Cls2.new.method1 
"Cls2#method1"
"Mod1#method1"
=> "Mod1#method1"
[8] pry(main)> Cls2.ancestors
=> [Mod1, Cls2, Cls1, Object, PP::ObjectMixin, Kernel, BasicObject]

prepend されたモジュール内で super を呼び出すことで, 継承チェーン上のクラスから同名のメソッドを探索して呼び出すことが出来る. ということは, 以下のような場合でも継承チェーンを辿って同名メソッドを呼び出すことが出来る.

module Mod1
  def method1
    super
    p 'Mod1#method1'
  end
end

class Cls1
  def method1
    p 'Cls1#method1'
  end
end

class Cls2 < Cls1
  prepend Mod1
  def method2
    p 'Cls2#method1'
  end
end

Cls2.new.method1 
Cls2.ancestors

pry で実行例.

[7] pry(main)> Cls2.new.method1 
"Cls1#method1"
"Mod1#method1"
=> "Mod1#method1"
[8] pry(main)> Cls2.ancestors
=> [Mod1, Cls2, Cls1, Object, PP::ObjectMixin, Kernel, BasicObject

ふむふむ.