私は最近、このフォームに出くわした:現在の名前空間に対してclojure関数をプライベートにする方法はありますか?
(def ^:private -ns- *ns*)
- は、名前空間に現在のファイル内の関数をプライベートにどのようにこのですか?
- この方法を使用して適用できるその他のアクセス制限にはどのようなものがありますか?
私は最近、このフォームに出くわした:現在の名前空間に対してclojure関数をプライベートにする方法はありますか?
(def ^:private -ns- *ns*)
:private
メタキーは、varsのアクセシビリティを制御するために使用されます。あなたはdefn-
を使ってプライベート関数を宣言することができます。
(defn- foo [x] x)
メタデータを介して適用できる他のアクセス制限はありません。
このような制限さえも、サーフェスレベルでしかありません(varはプライベートとマークされ、名前空間はいくつかの呼び出しからそれを省略します)。ただし、存在することがわかっている場合でも、varに直接アクセスできます。
'defn-'は、この有効なコードを使用するためのショートカットであるマクロに過ぎません: '(defn ^:private my-func [] ...' ...どちらかが動作します。 – Josh