有没有办法在Clojure中将符号标记为过时?
我可以使用Lein这样的东西,效果很好.
https://github.com/technomancy/leiningen/blob/1.x/src/leiningen/core.clj#L13
但它只在调用函数时发出警告.我真的很喜欢编译器在编译代码时选择它,而不是在调用它时.
当然,我可能无法定义编码器随后会选择的符号,但这使我无法提供任何信息,例如为什么或者何时弃用符号.
所有这些都适用于DSL,其中条款的弃用和过时将以合理的速率发生.
评论中已经有一些关于使用宏的内容,但正如有人指出的那样,这排除了将该函数用作 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 使用的可能性。
归档时间: |
|
查看次数: |
346 次 |
最近记录: |