我在创建新命名空间后遇到了这个问题。
代码如下:
(create-ns 'my-new-ns)
=> #object[clojure.lang.Namespace 0x7c7c8359 "my-new-ns"]
(in-ns 'my-new-ns)
=> #object[clojure.lang.Namespace 0x7c7c8359 "my-new-ns"]
(reduce + [1 2 3])
CompilerException java.lang.RuntimeException: Unable to resolve symbol: reduce in this context, compiling:(/private/var/folders/pg/bynypsm12nx1s4gzm56mwtcr0000gn/T/form-init1425759900088902804.clj:1:1)
如您所见,reduce
函数未在 my-new-ns
命名空间中定义。
我应该能够创建新的命名空间,所以这个问题的最佳解决方案是什么?
P.S:此外,我正在尝试为我的用户创建这些命名空间,以便他们能够在他们的命名空间中做任何他们想做的事情(这个想法就像一个容器)并在命名空间之间创建隔离。
最佳答案
clojure.core 函数在需要引用以使它们可用于非限定用途方面并不特殊。 ns
宏做了几件事:
- 创建命名空间 -
create-ns
- 将当前命名空间更改为该命名空间 -
in-ns
- 自动将所有 clojure.core 变量引用到新命名空间 -
refer-clojure
您始终可以使用核心函数的限定形式(不限定只是更少的输入),所以当您遇到这种情况时,这个简单的调用会让您再次正确:
(clojure.core/refer-clojure)
关于clojure - 为什么 Clojure 在创建新的命名空间后不提供标准库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41691669/