我怎样才能 public 在 Clojure 中公开我的命名空间的一些函数?

How can I just public expose some functions of my namespace in Clojure?

我有以下代码:

(ns mylib-clojure.core)

(defn foo2 [x]
  (inc x))

(defn foo1 [x]
  (foo2 x))

函数 foo2 仅在 foo1 内部使用。假设我不想公开函数 foo2,所以我为命名空间的用户提供了一个较小的 API。是否可以使 foo2 "private"?

您可以将 foo2 声明为 "private":

(defn- foo2 [x] (inc x))

mylib-clojure.core外是看不到的。 defn- 的文档可以在 here 中找到。另一种选择是在 foo1:

中声明它
(defn foo1 [x]
  (let [foo2 (fn [x] (inc x))]
    (foo2 x)))