我有一個庫,我將通過使用一個類將庫物件包裝在一個新類中,方法是從它繼承并添加一些實體變數,從而在應用程式中使用它。如果需要,我可以更改庫代碼。這是問題所在:
class A
def process_it
# Make a new instance
aa = self.class.new
do_something_to(aa)
end
def do_something_to(item)
item
end
end
class B < A
def initialize(extra = "Default extra")
@extra = extra
super()
end
def extra
@extra
end
end
# I want B to inherit A's methods, like #process_it but:
b = B.new("Non-default extra")
puts b.process_it.extra => Default extra
輸出應該是“非默認額外”,問題是,在父類中我呼叫 self.class.new 但不能傳遞任何引數來設定@extra。在呼叫中,self.class 是B,繼承的類,但是當我撰寫父類別庫A 時,我無法預測應該傳遞給self.class.new 的任何引數(如果有的話)。事實上,我可能有類 C < A 具有不同的初始化引數。
是否有一種正確的方法可以在庫 A 中撰寫代碼來實體化考慮可能引數的 self 類的新實體?
uj5u.com熱心網友回復:
會#dup為你作業嗎?而不是aa = self.class.new,將其更改為aa = self.dup
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/404412.html
標籤:
