コードにバグがあり、F#と遅延評価の詳細の一部がよくわからないと思います。F#は熱心に評価するため、次の関数に多少戸惑うことを知っています。
// 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
これを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>.$FSI_0134.main@()
Stopped due to error
これは私にそれgetStringFromFile
が怠惰に評価されていると思わせます-それで私は完全に混乱しています。F#が関数を評価する方法については何もわかりません。