英文:
foreach function instead of for loop
问题
以下是翻译好的部分:
我有以下的代码:
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# 的习惯用法?
我希望有一个更简洁的表达方式的部分原因之一是我在其他地方也要交互地使用它。
英文:
I have the following code:
for elt in result.data do
display_record elt
I factored out this pattern into:
let foreach proc seq =
for elt in seq do
proc elt
so that I can instead say:
result.data |> foreach display_record
Questions
- Is there already a function that does this?
- Would the above approach be considered idiomatic F#?
Part of the reason I'd like this more concise expression is that I use it in other places interactively.
答案1
得分: 2
集合函数 iter
是在你只关心副作用(即,你想要应用于每个元素的函数返回 unit
)时通常用来代替 for
循环的函数。
特别地,你的集合 filtered
是一个 TGARecordData 数组
,所以 Array.iter
:
Array.iter: (('a -> unit) -> 'a array -> unit)
使用 Array.iter
,你可以这样写:
filtered |> Array.iter display_record
它将会把你的 display_record
函数应用到 filtered
数组的每个元素上。display_record
仅用于它产生的副作用:打印一个 TGARecordData
值。
英文:
The collection function iter
is what you usually use instead of a for
loop if you are interested only in the side effects, i.e., the function you want to apply to each element returns unit
.
In particular, your collection filtered
is a TGARecordData array
, so Array.iter
:
Array.iter: (('a -> unit) -> 'a array -> unit)
With Array.iter
, you can write instead:
filtered |> Array.iter display_record
It will apply your display_record
function to every element of the filtered
array. display_record
is only for the side effects it produces: printing a TGARecordData
value.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论