Одним из примеров ленивости вызывает странные проблемы (случилось со мной сегодня, в Haskell):
import System.IO
main = do
content <- readFile "foo.txt"
writeFile "foo.txt" content
Это выдает следующее сообщение об ошибке при компиляции & выполняется:
foo.txt: openFile: resource busy (file is locked)
То, что я думал, что это будет do: Открыть файл foo.txt, прочитать содержимое, снова закрыть его. Затем откройте его для записи, напишите содержимое и закройте его снова.
Что он на самом деле сделал: «Ах, какое-то содержание. Я, вероятно, прочитаю его позже, когда мы действительно это понадобимся». Затем откройте «foo.txt» для записи. Начните писать контент ... нормально, теперь нам нужен контент. Откройте foo.txt для чтения - bam!
Я знаю, что это тривиально исправлять, но трудно найти, не знаете, где искать.
оценка Ленивый является способом, чтобы получить работу. – Zorf
Неверный. Если вы должны оценить ответ, то дополнительные накладные расходы для ленивой оценки создают стоимость без каких-либо преимуществ. – vy32
vy32 верен. Например, если у вас есть список объектов, которые отображаются в списке на мобильном устройстве, представление будет создано в тот момент, когда элементы списка появятся на экране. Если некоторые значения, отображаемые в списке, должны быть ленивы загружены, список заикается и отстает, потому что новые списки не могут быть заполнены достаточно быстро. – Janusz