Je rencontre un bogue dans mon code qui me fait penser que je ne comprends pas vraiment certains détails sur F # et l'évaluation paresseuse. Je sais que F # évalue avec impatience et je suis donc un peu perplexe par la fonction suivante:F # paresseux eval de lecteur de flux?
// Open a file, then read from it. Close the file. return the data.
let getStringFromFile =
File.OpenRead("c:\\eo\\raw.txt")
|> fun s -> let r = new StreamReader(s)
let data = r.ReadToEnd
r.Close()
s.Close()
data
Quand j'appelle cela dans FSI:
> let d = getStringFromFile();;
System.ObjectDisposedException: Cannot read from a closed TextReader.
at System.IO.__Error.ReaderClosed()
at System.IO.StreamReader.ReadToEnd()
at <StartupCode$FSI_0134>[email protected]()
Stopped due to error
Cela me fait penser que getStringFromFile
est en cours d'évaluation paresseusement - donc Je suis totalement confus. Je ne comprends pas comment F # évalue les fonctions.
+1 excellente explication. Merci pour les conseils. –