我想使用multiple-statements
来生成放在generate中的代码。我使用两个宏和一个调用函数,因为我认为我需要解决调用存储。理想情况下,do
已消失,而generate
只是包含' multiple-statements
生成的代码。最终它与Hiccup的作用相差太远,但我无法解释打嗝是如何使用可能不以文字形式提供的数据的。
(ns testprojclj.repromacro)
(defn store []
(identity {:a 1 :b 2 :c 2}))
(defn multiple-statements [val]
`(do
(println "some other logic or statement")
(println (map? ~val))
(println (str "type of arg is " (type ~val)))))
(defmacro generate [val]
(multiple-statements val))
(defn somefn []
(generate (store)))
编辑:我希望将类型识别为地图。相反,当我尝试不同的转义场景时,它不会编译或生成转义输出而不是工作函数调用。
答案 0 :(得分:0)
至少(至少对我来说)不清楚你想做什么以及为什么你需要一个宏。由于宏在编译时发生,我不确定你的意思是'消耗编译时安全数据'。在我看来,只需一个返回函数的函数就可以达到你想要的效果。如果你想要的是一个关闭一个值的函数,这里有一个如何完成的例子。
(defn store []
(identity {:a 1 :b 2 :c 2}))
(defn multiple-statements [val]
(fn []
(println "Some other logic or statements")
(println (map? val))
(println (str "Type of arg is " (type val)))))
(defn generate [val]
(multiple-statements val))
(def stmts (generate (store)))
然后你就可以了
so.core> (stmts)
Some other logic or statements
true
Type of arg is class clojure.lang.PersistentArrayMap
nil