【发布时间】:2012-07-23 09:08:43
【问题描述】:
我有一个与此类似的函数 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 循环命令。
【问题讨论】:
-
这更适合CodeReview.SE。无论如何,
fileCounter声明在哪里,你为什么最终将unit分配给files? (files是打算成为一个函数吗?) -
抱歉,格式有误导性,并且缺少 fileCounter 的声明。我编辑了代码来解决这个问题。