【发布时间】:2014-01-15 23:22:03
【问题描述】:
我正在尝试编写一个宏,可用于在新线程上调用函数,并在运行后打印函数的名称以及线程的名称。
到目前为止,我拥有的是:
(defmacro start-threads [f]
'(let [t (Thread. 'f)]
(prn (str "running " 'f " on: " (.getName t)))))
当我运行时:
(start-threads funcname)
输出:“在线程 47 上运行 f”。我希望它输出:“在线程47上运行funcname。当我尝试取消引用它时,它会尝试评估函数。我知道我没有在这里的线程上运行.start,但我应该能够添加之后。我确定宏在这里不是完全必要的,我主要是出于好奇而想知道,因为我刚刚开始思考 clojure 中的宏是如何工作的。
【问题讨论】: