Skip to content

Latest commit

 

History

History
31 lines (23 loc) · 2.12 KB

README.md

File metadata and controls

31 lines (23 loc) · 2.12 KB

Мемоизация

Създайте клас Memoizer, чийто конструктор приема като единствен аргумент какъвто и да е обект. Memoizer трябва да работи като прокси, тоест трябва да:

...отговаря на същите методи, като подадената инстанция и когато тези методи бъдат извикани, да връщат същите стойности, каквито биха върнали, ако бяха извикани директно върху инстанцията и тъй нататък.

Memoizer трябва също така да кешира резултатите от извиканите му методи и при повторно извикване на вече извикан метод със същите аргументи, да не се обръща към методите на подадената инстанция, а да връща резултата от кеша си.

Пример:

string = "Remember"
memoizer = Memoizer.new string

memoizer.length # => 8, извиква string.length
memoizer.length # => 8, не вика string.length

Уточнения:

  1. Memoizer не кешира резултати за методи, на които е подаден блок. Вместо това, в такива случаи се държи като обикновено прокси.
  2. Ако Memoizer бъде извикан с несъществуващ в подадената инстанция метод, очаквано следва да се хвърли NoMethodError.
  3. Memoizer ще бъде тестван само с public методи. Какво трябва да прави в други случаи, според вас, може да се обсъди в темата във форума. :-)
  4. Ако примерният тест ви се струва постничък, то бъдете сигурни, че това е нарочно и повече няма да получите. :-)