У меня плохо работает рекурсивная функция. Я не уверен, как запоминать эту функцию и стоит ли мне вообще запоминать ее. Мне нужна помощь в том, как запоминать эту функцию. Спасибо
def serialize(post)
if post.respond_to?(:each)
post.map{|ary| serialize(ary)}
else
serialize_item(post)
end
end
Мемоизация полезна только тогда, когда вы повторно запускаете один и тот же расчет несколько раз. Судя по предоставленным деталям, здесь все не так.
Насколько сложен serialize_item? Проблемы могут заключаться в том, что он обрабатывает действительно большие коллекции, и в этом случае мемоизатон действительно не поможет, вы все равно можете попробовать его. Просто нужно сохранить хеш, где ключ - post.id, а значение - сериализация. Затем в блок else добавьте return serialized_hash[post.id] if serialized_hash.key?(post.id); serialized_hash[post.id] = serialize_item(post)





Мемоизация может помочь, если
serializeбудет вызываться с одним и тем же значением снова и снова (возможно, черезpost.map{|ary| serialize(ary)}). Но сначала, уверены ли вы, что проблема не вserialize_itemили чем-то еще, что создает перечислимыйpost, который передается вserialize?