gpt4 book ai didi

clojure - 尝试将注释添加到 defrecord 宏中定义的类

转载 作者:行者123 更新时间:2023-12-02 03:29:14 25 4
gpt4 key购买 nike

我正在尝试创建一个类似于 Quartzite defjob 宏的宏,它创建了添加了 @DisallowConcurrentExecution 注释的 Job 类。代码在 repl 中有效,但在宏内部无效。

这有效...

user=> (defrecord ^{DisallowConcurrentExecution true} YYY []
#_=> org.quartz.Job
#_=> (execute [this context]
#_=> (println "whoosh!")))
user.YYY
user=> (seq (.getAnnotations YYY))
(#<$Proxy3 @org.quartz.DisallowConcurrentExecution()>)

...但这不是。

(defmacro defncjob
[jtype args & body]
`(defrecord ^{DisallowConcurrentExecution true} ~jtype []
org.quartz.Job
(execute [this ~@args]
~@body)))

根据 Rodrigo 的建议,这里有一种方法可以让它发挥作用。

(defmacro defdcejob
[jtype args & body]
`(defrecord ~(vary-meta jtype assoc `DisallowConcurrentExecution true) []
org.quartz.Job
(execute [this ~@args]
~@body)))

最佳答案

您不能使用 ^ reader macro里面的宏。看看this类似的问题。

关于clojure - 尝试将注释添加到 defrecord 宏中定义的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28227890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com