clojure - 为什么 Clojure 在创建新的命名空间后不提供标准库?

标签 clojure functional-programming namespaces lisp clojurescript

我在创建新命名空间后遇到了这个问题。

代码如下:

(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/

相关文章:

functional-programming - React vs ReactX vs 函数式编程 vs 响应式(Reactive)函数式编程 vs 响应式(Reactive)扩展

使用命名空间时,PHP spl_autoload_register 无法加载具有 require 范围的类

c++ - using 声明应该有多窄?

Clojure 文档 : Understanding This Example of the Reduce Function

scala - 使用 ZIO 在 Scala 中组合多个 future 和期权

clojure - 用Clojure中的向量构建一棵树

javascript - 有没有一种简单的方法可以用 Lodash 映射嵌套数据?

docker - 无法更新快照命名空间 : cannot create symlink in "/etc/docker": existing file in the way

clojure - clojure 中的 take-while 和 take-nth

clojure.core/map 不工作