saf - 2007-11-29 20:41:55

Przypominam państwu projektantom i implementatorom, że zmieniając z zewnątrz elementy niektórych kolekcji Smalltalka musimy wywoływać metodę Collection>>rehash, aby zapewnić prawidłowe wyszukiwanie elementów. Jeśli się nie mylę, dotyczy to co najmniej kolekcji Set, a przez to i Dictionary.

Projekt się chyba obędzie bez wzmianki o tym, ale warto o tym pamiętać, żeby nie przypomnieć sobie nagle kiedy już kolekcje nie będą się zachowywać jak powinny w czasie implementacji :)

Collect - 2007-11-29 21:57:37

No ale wiele problemów da się rozwiązać prosto i zgrabnie, czarując kolekcjowymi metodami. Np. jak się zmienia kolekcję przez collect to żadnych rehashów nie trzeba już robić no nie?

saf - 2007-11-29 23:18:41

Przy collect: nie trzeba robić rehasha, bo collect: tworzy nową kolekcję, a nie zmienia starą.

Rehash jest potrzebny na przykład jak masz na przykład instancję klasy Pole, która ma atrybut zawartość, na którym jest zbiór obiektów gry. Niech obiekty się psują z czasem jak specyfikacja przykazała - nagle zmienia się (z zewnątrz) jakość przedmiotu w tej kolekcji, a przez to zmienia się hash tego przedmiotu, no i kolekcja oparta na hashtables już nie zobaczy naszej deski albo czego tam. :)

("Collect" to fajny nick, ale ja i tak dojdę kto jest kim, a potem zablokuję możliwość pisania bez rejestracji :p)

GotLink.plSarbinowo pola namiotowe