将重度嵌套的Clojure函数转换为线程形式

Ian*_* Te 1 expression functional-programming clojure

我试图在Clojure中转换重度嵌套的表达式.一个例子如下:

(distinct (flatten (map keys (flatten (filter vector? (vals data))))))
Run Code Online (Sandbox Code Playgroud)

线程形式将是:

(->> data vals (filter vector?) flatten (map keys) flatten distinct)
Run Code Online (Sandbox Code Playgroud)

是否有可能在Clojure中创建一个函数或宏来帮助我自动获取带有嵌套表单作为输入的线程表单?或者我可以使用任何第三方工具吗?

Sam*_*tep 5

如果你正在使用CIDER,我会建议clj-refactor.它有两个重构能力->和->>,以及一大堆其他的东西.

  • Lighttable还有一个插件可以执行此操作:https://github.com/rundis/clj-light-refactor#threading (2认同)