了解Clojure';s required:一系列级联必需文件的影响
我试图在网上和书中找到答案,但我很难弄清楚这到底是如何处理的 让我们以这个场景为例。我有几个文件:了解Clojure';s required:一系列级联必需文件的影响,clojure,Clojure,我试图在网上和书中找到答案,但我很难弄清楚这到底是如何处理的 让我们以这个场景为例。我有几个文件: a.clj-名称空间:aaa.a b.clj-名称空间:bbb.b c.clj-名称空间:ccc.c d.clj-名称空间:ddd.d 每个文件都定义了一些函数。然后我有一系列必要的陈述: a.clj:[:要求[bbb.b][ccc.c][ddd.d] b.clj:[:要求[ccc.c]] d.clj:[:需要[bbb.b]] 那么我的核心应用程序确实需要[aaa.a] 我的理解是,当我编
-名称空间:a.clj
aaa.a
-名称空间:b.clj
bbb.b
-名称空间:c.clj
ccc.c
-名称空间:d.clj
ddd.d
:a.clj
[:要求[bbb.b][ccc.c][ddd.d]
:b.clj
[:要求[ccc.c]]
:d.clj
[:需要[bbb.b]]
#5
和#7
还是跳过了这些文件c.clj
中定义了一个函数foo
。如果在#5
中文件实际上被重新编译,函数foo
会更改其标识符吗?类似于:
- 第一次编译时是
#
- 第二次编译时将是
(如果确实是第二次编译)#
然而,真正跟踪这种行为并不是一项简单的任务,这也是为什么我在继续调试之前寻求对此类级联
require
语句的影响有更深入的理解。require
使用可选的:reload
或:reload all
键,分别请求:reload
或:reload all
,则不会重新加载名称空间。这可以通过名称空间顶层的简单println
验证(任何定义之外)。更改标识符不应该是问题,因为您的代码不应该引用标识符,它应该引用解析为标识符的变量。即使变量的值更改(反弹),捕获该变量指向的旧对象的函数仍将看到该值(gc无法收集到它,因为他们仍然持有对它的引用)。@noisemith非常感谢您的回答。这正是我想要的。有了这些额外的信息,我将继续我的测试。