我是一名业余程序员(职业厨师),目前正在尝试自学 F# 和一般的函数式编程。
无论如何,我在鬼混DeflateStream
,写了以下两个函数:
let Compress compressMe =
let ds = new DeflateStream(File.Create("compressed.txt"), CompressionMode.Compress)
File.OpenRead(compressMe).CopyTo(ds)
ds.Close()
let Decompress =
let ds = new DeflateStream(File.OpenRead("compressed.txt"), CompressionMode.Decompress)
ds.CopyTo(File.Create("decompressed.txt"))
ds.Close()
在 main 函数的主体中,它们被一个接一个地调用,如下所示:
Compress args.[0]
Decompress
但是,如果在程序运行时compressed.txt 不存在,则会Decompress
抛出 a FileNotFoundException
,这令人惊讶,因为唯一可以抛出这个的是对File.OpenRead("compress.txt")
. 大约一个小时后,我发现它Decompress
正在实现IComparable
并且在主函数中调用它之前正在执行。我发现通过将其定义更改为 let Decompress () = [...]
不再实现IComparable
,并且我的代码按预期执行。谁能告诉我为什么 F# 进行推断IComparable
以及为什么这样的推断会导致函数在标有 的主函数之前执行[<EntryPoint>]
?另外,请原谅我的代码的命令风格,我对此非常陌生。
提前致谢。