首页 > 解决方案 > Clojure 风格的线程宏?

问题描述

如何实现,或者有没有类似Clojure的线程宏的实现,即thread-first( ->)和thread-last( ->>)?

例子:

# equivalent of sum(1, 2)
@thread-first 1 sum(2)

# equivalent of any(map(isequal(1), [1,2,3]))
@thread-last [1,2,3] map(isequal(1)) any

标签: macrosjulia

解决方案


Julia 有流水线,但通常 |> 运算符只允许单参数函数。在 Clojure 中,thread-first 和 thread-last 参数将参数插入函数中多个参数的开头或结尾。

Lazy.jl 中确实有 @> 和 @>> 宏:

https://github.com/MikeInnes/Lazy.jl#macros

它们执行线程优先和线程最后,但语法不同。请参阅 Lazy.jl 文档。线程最后的示例:

 @>> 1:10 collect filter(isodd) square.() reduce(+)
 165

线程优先的示例:

@> 6 div(2)
3

推荐阅读