2016-04-03 8 views
1

Clojureで重く入れ子にされた式を変換しようとしています。 一つの例は以下の通りです:大きく入れ子になったClojure関数をスレッド形式に変換する

(distinct (flatten (map keys (flatten (filter vector? (vals data)))))) 

ねじ切りフォームは次のようになります。

(->> data vals (filter vector?) flatten (map keys) flatten distinct) 

は、私は、ネストされた形でスレッド形式を取得して自動化を支援関数やマクロを作成するために、Clojureの中にそれは可能です入力として?または、私が使用できるサードパーティツールがありますか?

+0

このようなマクロの使用例は考えられません。あなたは例を挙げることができますか?あるいはエディタを使ってソースコードでこれを行う方法を尋ねていますか? –

+0

@Elogentはい。私はそれが重く入れ子にされたコードをリファクタリングする際に開発者自身の利便性であると考えています。 –

+1

ネストされたフォーム*をスレッド化されたフォームに変換する唯一の理由は、ネストされたフォームをソースコードに書き込んで、Clojureでマクロ展開ステージのスレッド化されたフォームに変換できるようにするためです。そのようなマクロは完全に役に立たないでしょう。なぜなら、スレッド化マクロは入れ子になったフォームにちょうど戻って変換するからです。 –

答えて

5

CIDERを使用している場合は、clj-refactorをお勧めします。それは->->>の両方のリファクタリング能力とa whole bunch of other stuffを持っています。

+2

Lighttableにもこれを行うプラグインがあります:https://github.com/rundis/clj-light-refactor#threading – optevo

関連する問題