2016-08-23 2 views
0

私は '〜'コードではなく 'thr'という名前のスレッドマクロを呼び出せるマクロを作成しようとしています。私は試した:スレッドコードの名前を変更するためのマクロが動作しません。

(require threading) 
(define-syntax-rule (thr body ...) 
    (require threading) 
    (~> body ...)) 

(thr " checking " string-trim println) 

しかし、それは動作しません。エラーは次のとおりです。

define-syntax-rule: too many forms in: (~> body) 

私はまた、唯一の1つの本体なステートメントを試みたが、まだそれが動作しません:

(define-syntax-rule (thr2 body) 
    (require threading) 
    (~> body)) 
+0

エラーは依然として同じです。マクロからスレッドを削除すると、実行されますが、出力が得られます。# rnso

答えて

0

ラケットでこれを行うための最短の方法は次のとおりです。

(define-syntax thr (make-rename-transformer #'~>)) 
+1

はい、動作します。しかし、私はまだこれの前にスレッドを追加する必要があります。これをマクロにも含めることはできますか? – rnso

+2

それは話すために含まれています。 'thr'を提供して別のファイルで使用する場合は、スレッド化を必要としません。 – soegaard

+2

'(require(rename-in threading [〜> thr]))')を実行することもできます。提供モジュールをインポートします。 –

関連する問題