ClojureScript - 无法迭代 ns-unmap 函数
ClojureScript - Failing to iterate over the ns-unmap function
我无法在 ClojureScript 中运行一些在 Clojure 中运行没问题的东西。
(defn unmap [nspace & vars]
(doseq [var vars] (ns-unmap nspace var)))
用法为:
(unmap 'some.nspace 'vars 'to 'be 'removed)
您还可以取消映射宏,这样就不必引用所有内容。它所做的只是遍历符号列表并从给定的命名空间中提取它们的绑定。
宏形式或取消映射函数在 ClojureScript 中都不起作用(它们在 Clojure 中运行良好)。尝试定义上述函数时出现以下错误。
意外错误 (AssertionError) 宏扩展 cljs。core/ns-unmap。
断言失败:ns-unmap 的参数必须用引号引起来
不确定这是否是错误。看起来 ClojureScript 正在寻找类型提示。如果有人知道如何让它工作,我们将不胜感激。
在 ClojureScript 中,ns-unmap
宏设计用于在 REPL 中操作在开发时实现命名空间时使用的运行时和编译器状态。
传递给 ns-unmap
的符号需要在编译时已知,以便它在宏扩展时正确操作编译器状态。
这个问题可以通过定义一个扩展为 do
的宏来解决,其中包含每个所需的 ns-unmap
调用。
这是一个例子:
(defmacro unmap [nspace & vars]
`(do
~@(map (fn [var]
`(ns-unmap ~nspace ~var))
vars)))
我无法在 ClojureScript 中运行一些在 Clojure 中运行没问题的东西。
(defn unmap [nspace & vars]
(doseq [var vars] (ns-unmap nspace var)))
用法为:
(unmap 'some.nspace 'vars 'to 'be 'removed)
您还可以取消映射宏,这样就不必引用所有内容。它所做的只是遍历符号列表并从给定的命名空间中提取它们的绑定。
宏形式或取消映射函数在 ClojureScript 中都不起作用(它们在 Clojure 中运行良好)。尝试定义上述函数时出现以下错误。
意外错误 (AssertionError) 宏扩展 cljs。core/ns-unmap。 断言失败:ns-unmap 的参数必须用引号引起来
不确定这是否是错误。看起来 ClojureScript 正在寻找类型提示。如果有人知道如何让它工作,我们将不胜感激。
在 ClojureScript 中,ns-unmap
宏设计用于在 REPL 中操作在开发时实现命名空间时使用的运行时和编译器状态。
传递给 ns-unmap
的符号需要在编译时已知,以便它在宏扩展时正确操作编译器状态。
这个问题可以通过定义一个扩展为 do
的宏来解决,其中包含每个所需的 ns-unmap
调用。
这是一个例子:
(defmacro unmap [nspace & vars]
`(do
~@(map (fn [var]
`(ns-unmap ~nspace ~var))
vars)))