gpt4 book ai didi

clojure - Clojure 中的废弃符号

转载 作者:行者123 更新时间:2023-12-04 15:59:47 26 4
gpt4 key购买 nike

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

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

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

但是它只在调用函数时发出警告。我真的希望编译器在编译代码时选择它,而不是在调用它时。

当然,我不能定义符号,然后编译器会选择它
了,但这使我无法提供任何信息,例如为什么或何时
该符号已被弃用。

所有这些都是针对 DSL,其中术语的弃用和过时将以合理的速度发生。

最佳答案

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

(defn foo* [x y] (+ x y))

然后而不是写
(defmacro foo [x y] (warn) `(foo* x y))
(foo 1 2)
(map foo [5 6] [7 8])

您可以使宏扩展返回一个函数,当然可以像其他任何函数一样使用它:
(defmacro foo [] (warn) `foo*)
((foo) 1 2)
(map (foo) [5 6] [7 8])

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

关于clojure - Clojure 中的废弃符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14032907/

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