管道右通操作员PipeThrough

时间:2018-10-23 10:26:24

标签: f# currying

我已声明以下运算符以帮助使我的咖喱代码更清晰

Pipe-Through允许值通过方法传递并从另一端继续。我认为这有助于使我的代码更简洁。

let (|=>) x f = x |> f |> ignore; x

使用示例

let y = x |> transform
y |> logger.LogInformation
y
|> process
|> return

现在变成

x 
|> transform 
|=> logger.LogInformation 
|> process 
|> return

这有用还是我重新发明了轮子

1 个答案:

答案 0 :(得分:1)

它是有用的,并且像所有好的发明一样,它也是由他人独立完成的。

Scott Wlaschin称之为teehttps://fsharpforfunandprofit.com/rop/

建议的运算符为|>!

let inline    tee f v   = f v ; v
let inline  (|>!) v f   = f v ; v
let inline  (>>!) g f   = g >> fun v -> f v ; v    /// composition

(5 * 8) |> tee (printfn "value = %d") |> doSomethingElse
(5 * 8) |>!     printfn "value = %d"  |> doSomethingElse

此定义与您的定义稍有不同,因为它不使用ignore

感谢分享!