absence of clojure.core in non-default namespaces within lein repl
在一次莱恩代表中,每当我这样做
1 | (in-ns 'some-namespace-other-than-name.core) |
clojure.core默认情况下不包括在内。
为了说明,起初我发现自己被这样的事情抓住了
1 2 3 4 5 | db.core=> (in-ns 'db.seed) #object[clojure.lang.Namespace 0x12738ef5"db.seed"] db.seed=> (use 'environ.core) Syntax error compiling at (form-init7774277424301430706.clj:1:1). Unable to resolve symbol: use in this context |
我刚刚找到了解决方法:
1 2 3 4 | db.seed=> (clojure.core/use 'clojure.core) nil db.seed=> (use 'environ.core) nil |
我的问题是,clojure.core似乎自动包含在名称空间myapp.core中,但没有包含在我可能会在REPL中切换到的任何其他名称空间中。
(但是,很明显,当我从核心名称空间运行程序时,那些名称空间确实可以访问clojure.core。)
那只是莱宁根的默认值吗?
想知道我在这里缺少什么理解或用法。
是因为在运行程序时,只有myapp.core才需要访问clojure.core,而您的.core将使用的命名空间本身也不需要访问clojure.core,因为在执行时,它们只是导入进入您应用程式的.core?因此,切换到其他名称空间来运行事物本质上是人为的吗?
我查看了project.clj中:main键的文档,但找不到答案。
请参阅ClojureDocs.org中的以下两个参考:
- https://clojuredocs.org/clojure.core/in-ns
- https://clojuredocs.org/clojure.core/ns
我认为只使用
8thlight也发布了不错的博客文章。您还应该确保阅读How to ns。
示例
假设我有一个主ns
1 2 3 4 5 6 | ~/expr/demo > lein repl demo.core=> (in-ns 'tst.demo.core) #object[clojure.lang.Namespace 0x6a2b14a1"tst.demo.core"] tst.demo.core=> (use 'demo.core) Syntax error compiling at (/tmp/form-init10207825906790622351.clj:1:1). Unable to resolve symbol: use in this context |
因此上面显示了一个问题,
或者,只需使用
1 2 3 4 5 | ~/expr/demo > lein repl demo.core=> (ns tst.demo.core) ; note absence of single-quote! nil tst.demo.core=> (use 'demo.core) ; all clojure.core is automatically refered nil |