在 clojure 中私有的重载私有函数
overloaded private function which is private in clojure
通常我的函数结构相同:
(defn func-name
([] (some actions))
([ar] (some actions))
([ar aar] (some actions)))
而且通常只有一个变体是 public
。但是正如您从我的条目中看到的那样——我所有的函数都是 public
,因为使用 defn
而不是 defn-
。但是defn-
隐藏了所有函数,包括所有重载的。
有什么方法可以'hide'只重载函数的一部分吗?
例如,我想隐藏一个包含一个和两个参数的函数名。
当然我可以像这样在 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
的可见性。
我可以建议为 public 和私有空间使用不同的函数名称。即 func-name
代表 public 一个,func-name-
代表私人。
通常我的函数结构相同:
(defn func-name
([] (some actions))
([ar] (some actions))
([ar aar] (some actions)))
而且通常只有一个变体是 public
。但是正如您从我的条目中看到的那样——我所有的函数都是 public
,因为使用 defn
而不是 defn-
。但是defn-
隐藏了所有函数,包括所有重载的。
有什么方法可以'hide'只重载函数的一部分吗?
例如,我想隐藏一个包含一个和两个参数的函数名。
当然我可以像这样在 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
的可见性。
我可以建议为 public 和私有空间使用不同的函数名称。即 func-name
代表 public 一个,func-name-
代表私人。