zu erstellen Ich habe 3 einfache Klassen CashRegister, Bill und Position. Ein CashRegister besteht aus Bill-Objekten und ein Bill-Objekt besteht aus Position-Objekten. Sie sind wie folgtMethoden, um tiefe Kopie von Objekten ohne die Hilfe von Marshal
implementiertclass CashRegister
def initialize
@bills = []
end
def clone
#?
end
end
class Bill
def initialize(nr)
@nr = nr
@positions = []
end
def clone
#?
end
end
class Position
def initialize(product, price)
@product = product
@price = price
end
def clone
#?
end
end
Wie kann ich Methoden erstellen, die tief die Objekte dieser Klassen kopieren. Die Verwendung von Marshal.load(Marshal.dump(an_obj))
ist nicht erlaubt.
Edit: Bisher habe ich diese bekam:
class CashRegister
def initialize
@bills = []
end
def clone
@bills.map { |bill| bill.clone}
end
end
class Bill
def initialize(nr)
@nr = nr
@positions = []
end
def clone
cloned = super
cloned.positions = @positions.map{ |pos| pos.clone}
cloned
end
end
class Position
attr_reader :preis
# this method is given
def produkt
@produkt.clone()
end
def initialize(product, price)
@product = product
@price = price
end
def clone
cloned = super
cloned.product
cloned
end
end
Der Klon-Methode in der Klasse Position scheint ok (kein Compiler-Fehler) zu sein. Aber es gibt einen Fehler in der Klasse Bill, es heißt "undefined method 'positions =', also muss das Problem in der Zeile sein cloned.positions = @positions.map{ |pos| pos.clone}
. Aber ich verstehe nicht, können wir cloned.positions
nicht so anrufen?