Mam pytanie, dlaczego w linijce przedostatniej, źle wyświetla mi listę? Zastanawiam się, czy w metodzie ‘inspect’ źle w ogóle mi powiela krzyżyki. Chodzi o efekt: [####, #####, ######, #######]
Poradźcie proszę.
[code] class VU
include Comparable
attr :volume
def initialize(volume) @volume = volume
end
def inspect
‘#’ * @volume
end
def <=>(other)
self.volume <=> other.volume
end
def succ
raise(IndexError, “Zbyt duze natezenie glosnosci”) if @volume >= 9
VU.new(@volume.succ)
end
end
Co chcę uzyskać: [####, #####, ######, #######]
A to co dostaję: #<VU:0x78bc3b>
#<VU:0x8ddc4c>
#<VU:0x17a1767>
#<VU:0x968fda>
Przykładowe dane to jak w kodzie powyżej: 4…7
Zakres który tworzysz nie obejmuje liczb od 4 do 7, tylko obiekty VU z parametrami od 4 do 7. Skoro więc zamieniasz zakres na tablicę, tworzysz tablicę elementów VU i to wypisujesz. Metoda inspect działa dobrze, tylko nigdzie jej nie wywoływałeś.
[quote=Elavi]Co chcę uzyskać: [####, #####, ######, #######]
A to co dostaję: #<VU:0x78bc3b>
#<VU:0x8ddc4c>
#<VU:0x17a1767>
#<VU:0x968fda>
Przykładowe dane to jak w kodzie powyżej: 4…7[/quote]
Jeśli dobrze pamiętam puts używa to_s do “wyświetlania” obiektu, a defaultowa implementacja tej metody zwraca #<nazwa_klasy:id_obiektu> (lub “main” w specyficznym przypadku) – to co jest u Ciebie wyświetlane. Polecam zamienić inspect na to_s (; – zgodnie z dokumentacją inspect wywołuje to_s jeśli inna implementacja nie jest dostarczona.