2
的幾個包括模塊的初始化「如果我有一個模塊插入一個類,它有initialize
定義,我可以用super
稱之爲:調用在Ruby中
module M
def initialize(x)
@m = x
end
end
class MyClass
def initialize
super(3)
end
def val
@m
end
end
MyClass.new.val
# => 3
但是,如果我我怎麼代碼本有幾個模塊,也可能是一個父類?
class Parent
def initialize(x)
@p = x
end
end
module M
def initialize(x)
@m = x
end
end
module N
def initialize(x)
@n = x
end
end
class MyClass < Parent
include M
include N
def initialize
# ???? How to initialize here?
end
def val
[@m,@n,@p]
end
end
我猜內MyClass::initialize
super(100)
將設置可變@n
,因爲N
是「最近」的祖先,但我怎麼叫initialize
方法M
和Parent
?
偉大的文章!我不認爲我自己會得到這個解決方案。 IMO,Ruby中的當前實現 - 讓'super'選擇與參數列表匹配的祖先層次結構中的下一個'initialize',並跳過所有其他' - 是這種語言的糟糕設計點。如果有'initialize'方法,那是有原因的,它永遠不應該被默默地跳過.... – user1934428