我想在编译时在文件中创建多个def,而不必输入所有内容。我想做点什么:
(ns itervals)
(loop [i 0]
(if (<= i 128)
(do
(def (symbol (str "i" i)) i)
(recur (+ i 1)))))
以这种方式,我们在当前上下文中定义变量i1,...,i128。我无法想出在编译时这样做的方法,而没有明确地定义它们。我认为宏可能是要走的路,但我不知道如何。
答案 0 :(得分:7)
这更像是编译时间:
(defmacro multidef[n]
`(do ~@(for [i (range n)]
`(def ~(symbol (str "i" i)) ~i))))
(multidef 128)
i0 ; 0
i127 ; 127
i128 ; unable to resolve
但是我想不出能够说出差异的测试,所以也许这种区别是错误的。
答案 1 :(得分:4)
试试这个:
(for [i (range 1 129)]
(eval `(def ~(symbol (str "i" i)) ~i)))