重载的私有函数,它在clojure中是私有的



通常我的函数结构相同:

(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-表示专用。

相关内容

  • 没有找到相关文章

最新更新