#elixir #functional #utility

pipe-op

Rust中作为宏实现的Elixir管道操作符

1个不稳定版本

0.0.1 2020年10月19日

#31 in #elixir

自定义许可证

8KB
85

管道操作符

Rust中作为宏实现的管道操作符

我写这个库主要是出于以下三个原因:

  1. 您不能在库外类型上创建方法。这意味着链式调用会更困难。
  2. pipe_trait 很好,但它要求多参数函数使用柯里化。
  3. 我想写一个像HTTP服务器一样的插件
pipe!(
    value,
    function1(args),
    function2(args)?, // notice the operator here
    function3(args).await
)

管道操作符在像Elixir和Haskell这样的语言中很常见,它们提供了清晰性和便利性。

conn
|> send_resp(404, "Not found")

示例

参数将始终进入第一个函数或方法调用。

pipe!(value, a.f().m()) // is equivalent to a.f(value).m()

为了解决这个问题,我们可以将其转换为闭包,并在我们想要的地方传递参数。

pipe!(value, {|x| a.f().m(x)}()) // is equivalent to a.f().m(value)

依赖项

~1.5MB
~35K SLoC