なぜこれが機能するのかわかりません。
module Base
attr_reader :first
def setup
@first = 1
end
end
module Addon
attr_reader :second
def setup
#super
@second = 2
end
end
class Test
include Base
include Addon
def initialize(num)
@num = num
setup
end
end
a = Test.new(1)
p a.first
p a.second
基本的に、私はいくつかのものをセットアップする「ベース」モジュールを持っています。アドオンモジュールもあります。これは、クラスがそれを含めたい場合に、さらにいくつかのものをセットアップします。
今、私がそれをテストするとき、私がそのスーパーコールを持っていなければ、私は
nil
2
スーパーコールがあると
1
2
スーパーは実際にここで何をしますか?BaseとAddonが関連していない場合でも、Baseモジュールからsetupメソッドを呼び出しています。
モジュールのコンテキストでsuperを使用したのはこれが初めてです。以前は、クラスでスーパーコールを常に使用していて、同じメソッドを持つ親を見つけるために継承ツリーを上っていくだけだと思っていました。
複数のモジュールを含めると、ある種の継承ツリーも設定されますか?
編集:文脈上、アドオンモジュールはベースモジュールなしでは決して含まれず、ベースモジュールは常に追加のアドオンモジュールの前に含まれます。