これがなぜ機能するのか分かりません。Ruby:モジュールとスーパー?
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
基本的に私はいくつかのものを設定する "基本"モジュールを持っています。私はまた、いくつかのクラスがそれを含めることを望む場合、いくつかのものを設定するアドオンモジュールを持っています。今
私はそれをテストし、私はそのスーパーコールを持っていない場合、私はスーパーコールを持っているとき、私はスーパー実際に何
1
2
を取得
nil
2
を取得ここでやる? BaseとAddonが関連していなくても、Baseモジュールからsetupメソッドを呼び出しています。
モジュールのコンテキストでsuperを使用したのはこれが初めてです。以前はクラスでスーパーコールを使用していましたが、同じメソッドを持つ親を見つけるために継承ツリーを上に行くだけだと思っていました。
複数のモジュールを含めて、ある種の継承ツリーも設定していますか?
EDIT:コンテキストの場合、AddonモジュールはBaseモジュールなしでは含まれず、Baseモジュールは常に追加のAddonモジュールの前に含まれます。
あなたは正しいと思います。メソッドのシグネチャはおそらくスタックに格納され、superはスタック内のオブジェクトにメッセージを送ります。興味深い発見私は言うだろう! – Candide