macros - 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
解决方案
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
推荐阅读
- c# - 处理程序多次执行问题
- asp.net-core - .NET Core Web API 参数绑定问题 [FromForm] 和 [FromBody]
- php - Woocommerce 自定义订单状态不显示
- docker - 通过Service Fabric应用项目设置的应用环境在哪里可用?Dockerfile 还是 Docker 容器?
- biztalk - BizTalk:出站逻辑端口未从业务流程中删除
- reactjs - 如何在本机反应中实现注销功能
- android - React Native App 更新重定向使用链接(捆绑发布)
- sql - 如何在 SQL Server 的列表中插入文本文件的名称
- java - 在 Apache Tomcat 中部署应用程序时,我应该将 application.properties 文件放在哪里?
- python - datetime striptime-replace timezone-timestamp 比时间戳少 360 秒