Я столкнулся с ошибкой в своем коде, что заставляет меня думать, что я действительно не понимаю некоторые подробности о F # и ленивую оценку. Я знаю, что F # оценивает жадностью и поэтому я несколько озадачен следующей функции:F # lazy eval от считывателя потока?
// 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>[email protected]()
Stopped due to error
Это заставляет меня думать, что getStringFromFile
в настоящее время оценивается лениво - так Я совершенно смущен. Я не понимаю, как F # оценивает функции.
+1 превосходное объяснение. Спасибо за руководство. –