Link Clojure 中的矢量元素

Link vector element in Clojure

我正在尝试在 Clojure 的宏中读取文件。

我正在用那一行启动我的宏:

(def result (rd [s (FileReader. (File. "myFile.txt"))] (.read s)))

其中 "rd" 是我的宏的名称。

我的宏原型是这样的:

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

问题是我可以 "execute" FileReader,但是当我尝试 "execute" expr (.read s) 时,它不起作用,因为 s 未知。

所以我正在尝试 link 我的矢量元素使 s 已知,所以我希望 "variable" 由 val 指向。

我不确定我是否在做自己想做的事情,所以如果您看到其他方式,我会尽力而为。

在此先感谢大家。

如果你需要在运行时读取文件,就像你说的,你需要引入var..像这样:

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

然后您的宏调用将扩展为:

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