Witam.
Czy jest możliwość, żeby tablica zaczynała się od 1, a nie od 0?
To znaczy:
a = [1, 2, 3]
a[0] = 1
Żeby było:
a[1] = 1
A jeśli jest, to jak to osiągnąć?
Można, ale po co?
Korzystam z “algorytmu” który ma problem gdy tablica zaczyna od 0.
Generalnie przepisuję program z innego języka na ruby. Twórca mi powiedział o tym problemie.
Więc może choć jakaś podpowiedź jak szukać…?
Poprawić algorytm.
Czyli generalnie nie ma na to w miarę łatwego sposobu?
class Array
def [](arg)
return nil if arg <= 0
self.at(arg-1)
end
end
Po co przepisujesz cokolwiek na Ruby, jeżeli nie chcesz korzystać z reguł tego języka?
[quote=RawOnRails]class Array
def [](arg)
return nil if arg <= 0
self.at(arg-1)
end
end
Po co przepisujesz cokolwiek na Ruby, jeżeli nie chcesz korzystać z reguł tego języka?[/quote]
Ten nowy aragorn w świebodzinie by też tak zrobił, ale ma zbyt szeroko rozłożone ręce
RawOnRails:
Jeżeli nadpisujesz jakieś metody istniejących klas to powinieneś wiedzieć co robisz.
- Spróbuj użyć tego w praktyce, nie zadziała i w takiej formie nie ma szans zadziałać.
- Nawet jakbyś to zrobił poprawnie, to prawdopodobnie rozwalisz przy okazji kilka sposobów używania [].
- Jeżeli już chcesz nadpisać [], to jedynym sensownym sposobem na zrobienie tego jest:
class MyArray < Array
def [](index)
return nil if index <= 0
super(index - 1)
end
end
Tylko wtedy dalej masz coś, co nie zadziała tak jak chcesz:
a = MyArray.new([1, 2, 3])
a[1] = 5
a #=> [1, 5, 3] # przy czym przy takiej implementacji oczekiwałbyś [5, 2, 3]
Dlatego trzeba też nadpisać []=.
W niektórych algorytmach robiłem własne implementacje tablicy, ale na pewno nie powinno się tego robić poprzez nadpisywanie metod w klasie Array.
Heh, dopiero teraz zdałem sobie sprawę, że ktoś czytając forum może faktycznie tego użyć. W moim poście zabrakło oczywiście “;)”. Przepraszam i proszę o przeniesienie mojego posta do “zakładu patologii kodu”
Dobra. Mniej więcej łapie o co chodzi. Dzięki chłopaki.
@Risus: podeślij ten algorytm (z ciekawości chciałbym rzucić okiem). Chociaż ten fragment, który ma problem z tablicą indeksowaną od zera.