如何撤消clojure核心功能的覆盖?

时间:2015-11-02 11:06:34

标签: clojure

我正在学习一些clojure。我意外地覆盖了clojure中的核心方法:seq。我运行的代码行是:

(def seq "WATCH OUT!")

然后我在控制台发出警告:

WARNING: seq already refers to: #'clojure.core/seq in namespace: user, being replaced by: #'user/seq

现在seq的值为WATCH OUT!

如何撤消此操作?这不是一个危险的力量吗?理论上这不可能以这种方式打破一个程序吗?

2 个答案:

答案 0 :(得分:3)

您很可能在自己的命名空间中定义了seq符号,使得seq无法访问,而没有明确指定命名空间来查找它。

要检查是否是这种情况,请在“吹seq向上”后尝试此操作:

(clojure.core/seq [1 2 3])

如果可行(输出(1 2 3)),则解决方案将从clojure.core再次refer,默认情况下完成:

(refer 'clojure.core :only ['seq])

或者,a shorthand用于此特定命名空间:

(refer-clojure :only ['seq])

答案 1 :(得分:1)

在命名空间中定义var之后只需refer就行了,因为有一个编译器安全措施。

您可以取消映射var,使其能够再次refer名称:

(ns-unmap *ns* 'seq) (refer-clojure)