Clojure 以编程方式创建新名称空间,并从另一个名称空间将变量放入其中
假设我在test.core中,我想创建test.new-ns并在其中粘贴一个名为new method的var。有没有一种方法可以在不离开test.core的情况下做到这一点 这就是我想做的:Clojure 以编程方式创建新名称空间,并从另一个名称空间将变量放入其中,clojure,Clojure,假设我在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 ;;=>
(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}
create ns实际上存在于clojure.core中,并且具有此签名
至于输入ns,这称为实习生;此外,它不接受元数据映射作为单独的参数,而是将附加到名称符号的任何元数据传输到变量:
(intern 'test.new-ns (with-meta 'new-method {:meta 1}) {:value 1})
Reader meta也可以工作,只要您将其放在报价中:
(intern 'test.new-ns ' ^{:meta 1} new-method {:value 1})
create ns实际上存在于clojure.core中,并且具有此签名
至于输入ns,这称为实习生;此外,它不接受元数据映射作为单独的参数,而是将附加到名称符号的任何元数据传输到变量:
(intern 'test.new-ns (with-meta 'new-method {:meta 1}) {:value 1})
Reader meta也可以工作,只要您将其放在报价中:
(intern 'test.new-ns ' ^{:meta 1} new-method {:value 1})
我相信你在找实习生 在命名空间中查找或创建由符号名称命名的变量 ns,可以是符号或命名空间,设置其根绑定 如果提供,则发送至val。名称空间必须存在。风险价值将采用任何 来自名称符号的元数据。返回变量 因此,对于您的示例,它将有点像这样:
(ns test.core)
(create-ns 'test.new-ns)
(intern 'test.new-ns 'new-method {:value 1})
我相信你在找实习生 在命名空间中查找或创建由符号名称命名的变量 ns,可以是符号或命名空间,设置其根绑定 如果提供,则发送至val。名称空间必须存在。风险价值将采用任何 来自名称符号的元数据。返回变量 因此,对于您的示例,它将有点像这样:
(ns test.core)
(create-ns 'test.new-ns)
(intern 'test.new-ns 'new-method {:value 1})