我在一个名称空间中有一些私有函数,我希望将其包含在第二个名称空间中。例如创建另一个Clojure命名空间的别名
(ns one)
(defn ^:private foo
"A docstring"
[x] (* x 2))
而第二个命名空间需要创建一个别名,以这样的:
(ns two)
(def foo ???)
(foo 3) ;; should work as if the function in namespace one was called
=> 6
理想情况下,我想保存的文档字符串,所以我不必须保持它在两个地方。此外,我想要选择使用相同的名称或不同的名称。
此要求的原因如下:在名称空间one
中需要/使用该功能。 one
是two
的依赖项,并且由于我们不能具有循环依赖性,因此它不会在two
本身内定义foo
。 two
是公共API,因此foo
需要公开地为two
命名空间的一部分。
达到此目的的最佳方法是什么?
你想别名是相同的,或者它可以是任何东西? – Ankur 2012-07-31 08:38:37
@Ankur - 目前正在寻找使用相同的名称,但在某些情况下,使用不同的名称创建别名可能也很有用,所以如果解决方案允许的话,这将非常有用。 – mikera 2012-07-31 08:40:22
试试这个:'(def foo(with-meta one/foo(meta#'one/foo)))' – Ankur 2012-07-31 08:44:26