Если вы являетесь программистом ruby, возможно, вы столкнулись с шаблоном запоминания хеш-блоков. Для простого примера я представляю вам запомненную версию последовательности Фибоначчи:
fib_hash = Hash.new do |h,i|
h[i] = h[i-1] + h[i-2]
end
# establish the base cases
fib_hash[1] = 1; fib_hash[2] = 1
Конечно, это не единственный способ создать запомненную версию последовательности Фибоначчи. Вы также можете сделать следующее:
@cache = {}; @cache[1] = 1; @cache[2] = 1
def memo_fib(n)
@cache[n] ||= (memo_fib(n-1) + memo_fib(n-2))
end
Надеюсь, вы видите, как шаблон запоминания хеш-блоков отображается на вторую версию, которая гораздо чаще встречается во многих других языках. Я хотел бы знать, есть ли разница между двумя версиями? Я не могу избавиться от ощущения, что версия хеш-блока более эффективна, но я не могу доказать, почему.