使用`foreach`函数而不是`for`循环。

huangapple go评论53阅读模式
英文:

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.

huangapple
  • 本文由 发表于 2023年5月28日 16:20:39
  • 转载请务必保留本文链接:https://go.coder-hub.com/76350560.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定