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