gpt4 book ai didi

clojure - 如何从另一个命名空间卸载函数?

转载 作者:行者123 更新时间:2023-12-02 21:25:03 25 4
gpt4 key购买 nike

我从命名空间learning.greeting加载一个函数say-hi

(use 'learning.greeting)

当我尝试在当前(用户)命名空间下重新定义 say-hi 函数时,出现错误:

CompilerException java.lang.IllegalStateException: say-hi already refers to: #'learning.greeting/say-hi in namespace: user, compiling:(NO_SOURCE_PATH:1:1) 

那么如何从其他命名空间卸载该函数呢?

最佳答案

如果您想摆脱 REPL 中另一个命名空间到 Var 的直接映射,请说

(ns-unmap 'current-namespace 'local-alias)

示例:

user=> (ns-unmap *ns* 'reduce)
nil
user=> (reduce + 0 [1 2 3])
CompilerException java.lang.RuntimeException: Unable to resolve symbol: reduce in this context, compiling:(NO_SOURCE_PATH:2:1)

如果使用 :rename,本地别名将与 Var 的实际名称不同:

(use '[clojure.walk
:only [keywordize-keys]
:rename {keywordize-keys keywordize}])

要删除 clojure.walk 中指向 Vars 的所有映射:

(doseq [[sym v] (ns-map *ns*)]
(if (and (var? v)
(= (.. v -ns -name) 'clojure.walk))
(ns-unmap *ns* sym)))

关于clojure - 如何从另一个命名空间卸载函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27413389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com