2016-12-14 3 views
0

Clojureでマクロ内のファイルを読み込もうとしています。私はそのラインと私のマクロを起動していClojureのリンクベクトル要素

「RD」は私のマクロの名前である
(def result (rd [s (FileReader. (File. "myFile.txt"))] (.read s))) 

私のマクロのプロトタイプが、そのようなものです:

(defmacro rd 
    ([] nil) 
    ([arg] arg) 
    ([[variable val] expr] 
) 
) 

事は、私がFileReaderのを「実行」できるということですが、私は式expr(.read複数可)を「実行」しようとしているとき、それはですsは知られていないので動作しません。

私はベクトルの要素をリンクさせようとしていますので、変数でvalを指すようにします。

私は何をしたいのか分からないので、他の方法を見るならば、私はそれに従います。

ありがとうございました。

+1

なぜ関数ではなくマクロを書きたいのですか? – Shlomi

+0

マクロを使用する必要があるため、関数を使用する方が高速ですが、マクロを使用する必要があります。 – ElMacx

+3

なぜ必須ですか?学校のためですか?マクロはカスタム "構文"を提供するために最も一般的に使用されます。コンパイル時に評価されることに注意してください。コンパイル時にファイルを読み込む必要がありますか?私は正確にあなたが達成する必要があるものについて明確ではない。 – Shlomi

答えて

1

あなたは、実行時にファイルを読み込むために必要がある場合は、あなたが言ったように、あなたがVARを導入する必要があります...このような何か:

(defmacro rd [[variable val] expr] 
    `(let [~variable ~val] 
    ~expr)) 

してからマクロ呼び出しは、これに拡大する:

(let [s (FileReader. (File. "myFile.txt"))] (.read s)) 
+0

ありがとうたくさんの男! – ElMacx