在clojure中为私有的重载私有函数

在clojure中为私有的重载私有函数,clojure,clojurescript,overloading,private-functions,Clojure,Clojurescript,Overloading,Private Functions,通常我的职能结构相同: 通常只有一种变体是public。但正如您从我的条目中看到的,我所有的函数都是public,因为使用defn而不是defn-。但是defn-hideall函数,包括所有重载函数 有没有办法只“隐藏”重载函数的一部分 例如,我想隐藏一个具有一个和两个参数的arity的func名称 当然,我可以在一个defn中隐藏重载函数,如下所示: (defn awesome[] (let [func (fn some-func ([] (some actions))

通常我的职能结构相同:

通常只有一种变体是
public
。但正如您从我的条目中看到的,我所有的函数都是
public
,因为使用
defn
而不是
defn-
。但是
defn-
hideall函数,包括所有重载函数

有没有办法只“隐藏”重载函数的一部分

例如,我想隐藏一个具有一个和两个参数的arity的func名称

当然,我可以在一个
defn
中隐藏重载函数,如下所示:

(defn awesome[]
  (let [func (fn some-func ([] (some actions))
               ([ar] (some actions)))]
    (func)))
但我认为这有点混乱,我相信一定有办法解决它


谢谢

据我所知,这种可见性是由var的
meta
中的
:private
标志定义的。这两个表达式相等:

(defn ^:private foo [] "bar")
(defn- foo [] "bar")
因此,我认为您只能控制整个
var
的可见性


我可以建议对公共空间和私人空间使用不同的函数名。也就是说,
func name
用于公共的,而
func name-
用于私有的。

它不起作用-我用这种方式调用的函数很好。可能是我使用我的信息不正确吗?看看我的UPD1。你没把我弄对:)。我的意思是你不能这么做。不在表达式中添加元
(defn ^:private foo [] "bar")
(defn- foo [] "bar")