我使用以下代码在mylist
文件中编写*.txt
。
let outFile = new StreamWriter("4.txt")
let writeNumbersInFile (numbersToupleList)=function
|[] -> ()
|head::tail -> outFile.WriteLine(string (head))
let mylist= [1;2;3;4]
writeNumbersInFile mylist
outFile.Close()
这段代码成功创建了一个4.txt
,但是当我打开它时,那里什么都没有,但我希望看到
1
2
3
4
答案 0 :(得分:3)
这应该有用 - 而不是我如何删除numbersToupleList
参数 - 你不需要它(并且你没有使用它)因为function
有一个隐含的参数:
let outFile = new StreamWriter("4.txt")
let rec writeNumbersInFile =
function
|[] -> ()
|head::tail ->
outFile.WriteLine (string head)
writeNumbersInFile tail
let mylist= [1;2;3;4]
writeNumbersInFile mylist
outFile.Flush()
当然不需要递归(有更高阶函数可以为您执行此操作) - 您可以改为使用Seq.iter
或List.iter
:
let outFile = new StreamWriter("4.txt")
let writeNumbersInFile =
Seq.iter (string >> outFile.WriteLine)
let mylist= [1;2;3;4]
writeNumbersInFile mylist
outFile.Flush()
现在你应该把它重构成这样的东西 - 注意我必须给出file
的类型,以便F#可以决定使用哪个StreamWriter
构造函数,并且这将处理{在StreamWriter
(writeNumbersInFile
)完成工作后{1}} - 所以在GC启动之前你不会保留文件句柄:
use