継承

参考:

Ruby の継承とオーバーライドについてまとめてみた | Java からの Ruby on Rails 入門

クラス・メソッド・initialize の継承 – Qiita

Ruby の継承についてのはなし | 徒然なるままに

クラスの継承を確認する

祖先クラスの一覧を配列として取得する。

> obj.class.ancestors

参考:

特定のクラスが別のクラスを継承しているか判定する方法 – Qiita

Ruby でメソッド一覧、継承クラス一覧、include したモジュールを確認するメソッドたち | 気軽に楽しくプログラムと遊ぶ

super

参考:

super (Ruby 2.6.0)

`super`キーワードの4つの側面 翻訳 | TechRacho

super の挙動 | web エンジニアの日常

スーパークラスのメソッドを呼び出す | Ruby 入門 (www.javadrive.jp)

引数があるスーパークラスのメソッドを呼び出す | Ruby 入門 (www.javadrive.jp)

super の super を呼び出す

superclassinstance_methodbind を使う。

grand_superclass = self.class.superclass.superclass
grand_super_method = grand_superclass.instance_method(__method__)
grand_super_method.bind(self).call(*args, &block)

参考:

instance method Class#superclass (Ruby 2.6.0)

instance method Module#instance_method (Ruby 2.6.0)

instance method UnboundMethod#bind (Ruby 2.6.0)

instance method Method#=== (Ruby 2.6.0)

Calling super’s super method – Stack Overflow

initialize の継承

  • new 呼び出し時の引数が渡される (引数の数が異なると呼び出し時にエラーが発生する)
  • 明示的に super を呼び出す

参考:

Ruby の initialize メソッドの継承 | Worth Living

initialize メソッド | Ruby をラクガク

Is it possible to override #initialize in a Ruby module? – Stack Overflow

Class.new

親クラスを指定してクラスを動的に生成する。

klass = Class.new(Parent)

クラスをその場で定義する。(クラスの本体をブロックで与える。)

klass = Class.new do
  class << self
    attr_accessor :name
  end
  self.name = "MyClass"
end

参考:

Random Ruby Tricks: Class.new | Literate Programming by Steve Klabnik

Set class inheritance after class delcaration OR setting class inheritance on const_set class – Stack Overflow

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です