Clojure中过时的符号

Phi*_*ord 6 clojure

有没有办法在Clojure中将符号标记为过时?

我可以使用Lein这样的东西,效果很好.

https://github.com/technomancy/leiningen/blob/1.x/src/leiningen/core.clj#L13

但它只在调用函数时发出警告.我真的很喜欢编译器在编译代码时选择它,而不是在调用它时.

当然,我可能无法定义编码器随后会选择的符号,但这使我无法提供任何信息,例如为什么或者何时弃用符号.

所有这些都适用于DSL,其中条款的弃用和过时将以合理的速率发生.

ama*_*loy 1

评论中已经有一些关于使用宏的内容,但正如有人指出的那样,这排除了将该函数用作 HOF 的可能性。你可以绕过这个问题,尽管治疗方法可能并不比疾病本身更糟糕。例如,假设你的函数是

(defn foo* [x y] (+ x y))
Run Code Online (Sandbox Code Playgroud)

然后而不是写

(defmacro foo [x y] (warn) `(foo* x y))
(foo 1 2)
(map foo [5 6] [7 8])
Run Code Online (Sandbox Code Playgroud)

您可以使宏展开返回一个函数,当然可以像其他函数一样使用它:

(defmacro foo [] (warn) `foo*)
((foo) 1 2)
(map (foo) [5 6] [7 8])
Run Code Online (Sandbox Code Playgroud)

可能不值得尴尬,但确实提供了一种在使用已弃用的功能时进行投诉的方法,同时仍然保留 HOF 使用的可能性。