我有一个与此类似的函数 A,它将函数 B 应用于目录中的每个文件。每个文件都有一定数量的“条目”;函数 B 将当前条目总数作为参数,并返回在当前文件中找到的新条目数。
此外,我需要计算处理的文件数并在每次处理文件时显示此计数。由于我的命令背景,我想出了 2 个可变变量和一个 for 循环。
let files = Directory.EnumerateFiles sourceDirectory
let mutable numEntries = 0
let mutable numFiles = Seq.length files
let mutable index = 0
for file in files do
printfn "done %d of %d" index numFiles
let numNewEntries = processFile file numEntries
numEntries <- numEntries + numNewEntries
index <- index + 1
所以,有几个问题:
- 我怎样才能以更惯用、更实用的风格来写这个?
- 你能解释一下更惯用的解决方案的优势吗?我对函数式编程非常陌生,有时我看不出我肮脏的 for 循环命令有什么问题。