相关疑难解决方法(0)

来自流阅读器的F#懒惰eval?

我遇到了我的代码中的一个错误,这让我觉得我并不真正理解有关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
Run Code Online (Sandbox Code Playgroud)

当我在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
Run Code Online (Sandbox Code Playgroud)

这让我觉得这getStringFromFile是懒惰的评价 - 所以我完全糊涂了.我没有得到关于F#如何评估函数的信息.

evaluation f# eager lazy-evaluation

5
推荐指数
1
解决办法
1167
查看次数

标签 统计

eager ×1

evaluation ×1

f# ×1

lazy-evaluation ×1