用foreach函数替代F# for循环:内置函数查询与写法规范性咨询
F#遍历序列操作的疑问解答
背景
我原本使用的遍历代码:
for elt in result.data do display_record elt
为了复用,我提取出了自定义函数:
let foreach proc seq = for elt in seq do proc elt
调用时通过管道符简化:
result.data |> foreach display_record
现在想请教两个问题:
- F#中是否已有实现该功能的内置函数?
- 上述自定义实现是否符合F#的惯用写法?
(注:我希望用更简洁的表达式,因为会在交互式场景中多次使用)
问题解答
1. 内置函数存在吗?
有的,F#标准库提供了Seq.iter函数,完全匹配你需要的功能——它会遍历序列的每个元素,对每个元素执行传入的操作函数。
直接用它替换你的自定义调用即可:
result.data |> Seq.iter display_record
2. 自定义实现是否符合惯用写法?
你的自定义foreach功能没问题,但不符合F#的惯用写法。核心原因:
- F#社区遵循"优先使用标准库"的原则,
Seq.iter是所有F#开发者都熟悉的标准操作,用它能让代码更易读、更具一致性,不需要额外解释自定义函数的作用。 - 在交互式场景中,直接用
Seq.iter更高效,省去了自定义函数的定义步骤,直接就能完成遍历操作。
内容的提问来源于stack exchange,提问作者dharmatech
相关产品推荐
相关产品推荐

