通常我的函数结构相同:
(defn func-name
([] (some actions))
([ar] (some actions))
([ar aar] (some actions)))
通常只有一种变体是public
。但正如你从我的条目中看到的,我所有的函数都是public
,因为使用了defn
而不是defn-
。但defn-
隐藏了所有函数,包括所有重载函数。
有没有办法只"隐藏"重载函数的一部分?
例如,我想隐藏一个arity为一个和两个参数的函数名。
通常,我可以将重载函数隐藏在一个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
的可见性。
我可以建议在公共空间和私人空间使用不同的功能名称。I.e func-name
表示公用一,func-name-
表示专用。