Перегруженная приватная функция, которая приватна в clojure
Обычно у меня одинаковая структура моих функций:
(defn func-name
([] (some actions))
([ar] (some actions))
([ar aar] (some actions)))
И обычно только один из этих вариантов public
, Но, как вы можете видеть из моей записи - все мои функции public
из-за использования defn
вместо defn-
, Но defn-
скрыть все функции, включая все перегруженные.
Есть ли способ "спрятать" только часть перегруженной функции?
Например, я хочу скрыть func-имя с арностью одного и двух аргументов.
Ofcorse я могу скрыть перегруженную функцию внутри одной defn
как это:
(defn awesome[]
(let [func (fn some-func ([] (some actions))
([ar] (some actions)))]
(func)))
Но я думаю, что это немного грязно, и я уверен, что должен быть способ решить это.
Спасибо!
1 ответ
Как я знаю, эта видимость определяется :private
флаг в вар meta
, Итак, эти два выражения равны:
(defn ^:private foo [] "bar")
(defn- foo [] "bar")
Поэтому я думаю, что вы можете контролировать видимость только в целом var
,
Я могу предложить использовать разные имена функций для публичного и частного пространства. Т.е. func-name
для общественности и func-name-
для частного.