gpt4 book ai didi

clojure - 解决 Clojure 循环依赖

转载 作者:行者123 更新时间:2023-12-03 00:55:31 24 4
gpt4 key购买 nike

我正在开发一些 Clojure 代码,这些代码在不同的命名空间之间具有一些循环依赖关系,并且我正在尝试找出解决它们的最佳方法。

  • 基本问题是我在其中一个文件中收到“No such var: namespace/functionname”错误
  • 我尝试“声明”该函数,但随后它提示:“无法引用不存在的合格变量”
  • 我当然可以重构整个代码库,但每次需要解决依赖项时,这似乎不切实际......并且对于某些循环依赖项网络可能会变得非常难看
  • 我可以将一堆接口(interface)/协议(protocol)/声明分离到一个单独的文件中,并让所有内容都引用它......但这似乎最终会变得困惑并破坏我当前拥有的良好模块化结构相关功能组合在一起

有什么想法吗?在 Clojure 中处理这种循环依赖的最佳方法是什么?

最佳答案

我记得在邮件列表和其他地方有很多关于 Clojure 命名空间的讨论,我必须告诉你,共识(以及,AFAICT,Clojure 设计的当前方向)是循环依赖是一种设计呼唤重构。解决方法有时可能是可行的,但很丑陋,可能会影响性能(如果你让事情变得不必要的“动态”),不能保证永远有效等等。

现在你说循环项目结构很好并且模块化。但是,如果一切都取决于一切的话,为什么要称之为……?此外,如果您提前计划树状依赖关系结构,那么“每次需要解决依赖关系时”应该不会很频繁。为了解决您将一些基本协议(protocol)等放在自己的命名空间中的想法,我不得不说,很多时候我希望项目能够做到这一点。我发现它对我浏览代码库并快速了解它正在使用哪种抽象的能力非常有帮助。

总而言之,我投票给重构。

关于clojure - 解决 Clojure 循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3084205/

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