Jednym z przykładów lazyness powodując dziwne problemy (zdarzyło mi się dzisiaj, w Haskell):
import System.IO
main = do
content <- readFile "foo.txt"
writeFile "foo.txt" content
ten wyrzuca następujący błąd podczas skompilowane & wykonywany:
foo.txt: openFile: resource busy (file is locked)
Co Myślałem, że będzie wykonaj: Otwórz plik foo.txt, przeczytaj zawartość, zamknij ponownie. Następnie otwórz go do pisania, zapisz treść i zamknij ponownie.
Co to właściwie zrobiło: "Ah, niektóre treści, prawdopodobnie przeczytam to później, kiedy będziemy tego potrzebować." Następnie otwórz "foo.txt" do pisania. Zacznij pisać treść ... ok, teraz potrzebujemy treści. Otwórz foo.txt do czytania - bam!
Wiem, że naprawienie jest trywialne, ale trudno je znaleźć, jeśli nie wiesz, gdzie szukać.
ocena Lazy jest sposobem na uzyskanie wydajności. – Zorf
Niepoprawnie. Jeśli musisz ocenić odpowiedź, dodatkowy koszt dla leniwego oszacowania tworzy koszt bez korzyści. – vy32
vy32 jest poprawny. Na przykład, jeśli masz listę obiektów wyświetlanych na liście na urządzeniu mobilnym, widok zostanie utworzony w momencie, gdy elementy listy pojawią się na ekranie. Jeśli niektóre wartości, które są wyświetlane na liście, muszą być leniwy, lista będzie się zacinać i opóźniać, ponieważ nowe listy nie mogą być wystarczająco szybko wypełnione. – Janusz