当我写一个看起来像这样的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指出我的重复问题。它提到了几种替代方案,包括tee
和tap
。我喜欢|>!
运算符方法:
let inline ( |>! ) x sideEffect = sideEffect x; x
let createCollection3() =
ObservableCollection<int>()
|>! fun c -> c.CollectionChanged.Add(onCollectionChanged)
|>! logInstanceCreation
非常好!