LoginSignup
0
0

More than 1 year has passed since last update.

はじめに

pythonからrubyに移植する話がありまして、ソースを見ていたところpythonに多重継承がありました。

どうしたものか。

競技プログラミング

atcoder さんには大変お世話になっているものの、classどころかdefもほとんど書きませんので、クラス・モジュール・継承となると再勉強が必要。
Ruby Gold も使わなければ忘れるだけですね。

Perl to Ruby

ところで、PerlユーザーのためのRuby入門 という本がございまして、例によって20年位前の本になりますが、第5章に5-2 Perl多重継承v.s. Ruby Mix-inという興味深い記載が載っておりました。

class Staff
  def initialize(hash)
  p :Staff_initialize
    @name = hash[:name]
  end
end

module TradeStaff
  def initialize(hash)
  p :TradeStaff_initialize
    super(hash)
    @sales = hash[:sales]
    @trade_skill = 10
  end
end

module AdminStaff
  def initialize(hash)
  p :AdminStaff_initialize
    super(hash)
    @rooms = hash[:rooms]
    @admin_skill = 10
  end
end

class TradeAdminStaff < Staff
  include TradeStaff
  include AdminStaff
  def initialize(hash)
  p :TradeAdminStaff_initialize
    super(hash)
  end
end

p staff = TradeAdminStaff.new(
    :name   => "Tom",
    :sales  => 13000,
    :rooms  => ["room_001", "room_003"])

p staff = TradeAdminStaff.ancestors
[TradeAdminStaff, AdminStaff, TradeStaff, Staff, Object, Kernel, BasicObject]

ancestorsすると継承リストが見られますが、superでひとつ前の継承されたメソッドが呼ばれることに少し感動しました。

まとめ

  • 少し感動した
  • ゆくRuby くRuby
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0