Създайте клас Memoizer, чийто конструктор приема като единствен аргумент
какъвто и да е обект. Memoizer трябва да работи като прокси, тоест трябва да:
...отговаря на същите методи, като подадената инстанция и когато тези методи бъдат извикани, да връщат същите стойности, каквито биха върнали, ако бяха извикани директно върху инстанцията и тъй нататък.
Memoizer трябва също така да кешира резултатите от извиканите му методи и при
повторно извикване на вече извикан метод със същите аргументи, да не се обръща
към методите на подадената инстанция, а да връща резултата от кеша си.
string = "Remember"
memoizer = Memoizer.new string
memoizer.length # => 8, извиква string.length
memoizer.length # => 8, не вика string.length
Memoizerне кешира резултати за методи, на които е подаден блок. Вместо това, в такива случаи се държи като обикновено прокси.- Ако
Memoizerбъде извикан с несъществуващ в подадената инстанция метод, очаквано следва да се хвърлиNoMethodError. Memoizerще бъде тестван само сpublicметоди. Какво трябва да прави в други случаи, според вас, може да се обсъди в темата във форума. :-)- Ако примерният тест ви се струва постничък, то бъдете сигурни, че това е нарочно и повече няма да получите. :-)