Clojure式线程宏?

时间:2019-06-15 13:19:13

标签: macros julia

如何实现或是否有Clojure-like threading macros的实现,即线程优先(->)和线程最后(->>)?

示例:

# 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

1 个答案:

答案 0 :(得分:1)

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