我一直在尝试使用 Clojure 标记的文字,并注意到读者不会评估参数,非常像宏。这是有道理的,但是这样做的适当解决方案是什么?显式评估?
例子:给定这个函数
(defn my-data
([[arg]]
(prn (symbol? arg))
:ok))
而这个定义data_readers.clj
{myns/my-data my.ns/my-data}
以下行为不同:
> (let [x 1] (my.ns/my-data [x]))
false
:ok
所以x
传入的值在被传入之前被评估my-data
。另一方面:
> (let [x 1] #myns/my-data [x])
true
:ok
所以如果我想使用x
inside的值my-data
,my-data
函数需要对其做一些事情,即检查它x
是一个符号,如果是,使用(eval x)
. 这看起来很难看。有更好的方法吗?