注意:这不是关于并发性的.这是关于线程宏.
我知道->将对象放在第二个位置->>并将参数放在最后一个位置.
现在,我很好奇,就像#( ... % )函数的简写符号一样,是否有一个简短的线程表示法让我将参数放在任意位置?
目标是,不是让线程有一个固定的位置来运行...我可以编写任意形式,并在特殊位置插入%%,%%是插入线程的位置.
谢谢!
Gre*_*pak 34
现在在Clojure中有一个通用的线程宏,因为1.5称为as->.
这条推文给出了一个如何工作的例子:https://twitter.com/borkdude/status/302881431649128448
(as-> "/tmp" x
(java.io.File. x)
(file-seq x)
(filter (memfn isDirectory) x)
(count x))
Run Code Online (Sandbox Code Playgroud)
第一个'x'绑定到"/ tmp",文件由它组成.'x'再次反弹到生成的文件,并通过'file-seq'函数等.
Ale*_*sky 26
瑞士箭头图书馆的"钻石棒" 将满足您的需求:
(-<> 0
(* <> 5)
(vector 1 2 <> 3 4))
; => [1 2 0 3 4]
Run Code Online (Sandbox Code Playgroud)
这就是说,它不是你最终需要经常的东西(或曾经在我的Clojure经验)
Ale*_*art 15
如果有其他人遇到这个问题,那么提供的宏存在一个原因,但是任意放置的宏都不会:后者会导致API设计不佳.
该->宏放置在第一位置的说法.这对应于处理某些主题论证的函数,例如conj,assoc.
该->>宏放在最后的位置的说法.这对应于对序列起作用的函数,例如map,reduce.
很好地设计你的API,你不太可能需要这样的宏.