是否有内置的F#功能对项目执行副作用并返回项目

时间:2014-11-07 20:56:11

标签: f#

当我写一个看起来像这样的F#函数时......

let createCollection1() =
    let c = ObservableCollection<int>()
    c.CollectionChanged.Add(onCollectionChanged)
    logInstanceCreation c
    c

...我希望做这样的事情......

let apply f a = f(a); a

let createCollection2() =
    ObservableCollection<int>()
    |> apply (fun c -> c.CollectionChanged.Add(onCollectionChanged))
    |> apply logInstanceCreation

我的apply函数只是对参数执行副作用,然后返回该参数。我知道它并没有太大的区别,但我喜欢它。

是否已经内置了F#函数,例如我的apply函数?

修改

感谢John Palmer指出我的重复问题。它提到了几种替代方案,包括teetap。我喜欢|>!运算符方法:

let inline ( |>! ) x sideEffect = sideEffect x; x

let createCollection3() =
    ObservableCollection<int>()
    |>! fun c -> c.CollectionChanged.Add(onCollectionChanged)
    |>! logInstanceCreation

非常好!

0 个答案:

没有答案