说我在test.core
并且我想创建test.new-ns
并在那里粘贴一个名为new-method
的var。有没有办法在不离开test.core
的情况下做到这一点?
这就是我想要做的事情:
(ns test.core)
(create-ns 'test.new-ns)
(put-in-ns 'test.new-ns 'new-method {:meta 1} {:value 1})
*ns* ;=> test.core
test.new-ns/new-method ;;=> {:value 1}
(meta #'test.new-ns/new-method) ;; => {:meta 1}
答案 0 :(得分:3)
create-ns
实际上存在于clojure.core
中并且具有此签名。
至于put-in-ns
,称为intern
;另外,它不是将元数据映射作为单独的参数接受,而是将附加到“name”符号的任何元数据传输到Var:
(intern 'test.new-ns (with-meta 'new-method {:meta 1}) {:value 1})
Reader meta也可以,只要你把它“放在引号内”:
(intern 'test.new-ns ' ^{:meta 1} new-method {:value 1})
答案 1 :(得分:2)
我相信你正在寻找intern
。
在命名空间中查找或创建由符号名称命名的var ns(可以是符号或命名空间),设置其根绑定 如果提供,则为val。命名空间必须存在。 var将采用任何 名称符号中的元数据。返回var。
所以对于你的例子,它会有点像这样:
(ns test.core)
(create-ns 'test.new-ns)
(intern 'test.new-ns 'new-method {:value 1})