2016-05-27 11 views
3

私は、バインディングのベクトルとこれらのバインディングにアクセスできる関数をとるマクロを記述しようとしています。Clojureマクロで変数をバインドする方法は?

(defmacro f-with-binds [binds f] 
    `(let [[email protected]] 
    ~f)) 

にもかかわらず、上記の作品:最も単純な形式では筆記体がforletのようなマクロの発生しませんnmとして宣言されていない変数を強調しているため

(f-with-binds [n 123 m 456] (println n m)) ;; => 123 456 

私はこれで満足していません。実装を改善するにはどうすればよいですか?

PS:本当のマクロは、トランスデューサを返します - バインディングは、トランスデューサの状態や機能は、トランスデューサのステップ関数@superkonduktrコメントから取ら

+3

「let」と「for」は、筆記体の特殊なケースとして扱われることはありますか? Cursiveは閉鎖されたソースなので、言うことは難しいです。ところで、 –

+1

あなたは '[〜@ binds]'をする必要はありません。 '(let〜binds〜f)'を使うことができます。 – leetwinski

+0

@leetwinski lol、ありがとう、 –

答えて

2

である:

これは、現在ある筆記体の既知の問題ですworked onです。今のところ、唯一の救済策は、ベータ版の1.3.0-eap1にあります。ここでは、マクロ内のバインディングを解決するようにCursiveに指示することができますas if it was a let。もう1つの解決策は、未解決シンボルの強調表示を完全に無効にすることです(設定→言語&フレームワーク→Clojure→未解決シンボルの強調表示)。

関連する問題