Jak stwierdził @kotarak, nie ma sposobu (o ile wiem), aby to zrobić, ani nie jest to pożądane.
Oto dlaczego lubię defn-
:
I okazało się, że podczas korzystania z różnych bibliotek Clojure Czasem trzeba nieco zmodyfikować jedną funkcję do lepszego kolorze moich potrzeb. Często jest to coś małego, co ma sens tylko w moim konkretnym przypadku. Często jest to po prostu char lub dwa.
Ale gdy ta funkcja ponownie wykorzystuje wewnętrzne prywatne funkcje, utrudnia jej modyfikację. Muszę skopiować i wkleić wszystkie te prywatne funkcje.
Rozumiem, że jest to sposób, aby programista powiedział, że "to może ulec zmianie bez powiadomienia".
Niezależnie chciałbym przeciwny konwencji:
- zawsze używać
defn
, która sprawia, że wszystko publicznego
- korzystanie
defn+
(która jeszcze nie istnieje), aby określić do programatora, które funkcje są częścią publiczny interfejs API, z którego ma korzystać. defn+
nie powinien być inny niż defn
w przeciwnym razie.
Również należy pamiętać, że jest to możliwe i tak access private functions:
;; in namespace user
user> (defn- secret []
"TOP SECRET")
;; from another namespace
(#'user/secret) ;;=> "TOP SECRET"
Nie tylko to, że nie jest, byłoby naprawdę nieładne z umysłem jakiegokolwiek innego Clojuriana patrzącego na taki kod. Zniechęciłbym go, nawet gdyby było to wykonalne. –