gpt4 book ai didi

clojure - 重载的私有(private)函数在 clojure 中是私有(private)的

转载 作者:行者123 更新时间:2023-12-02 06:27:23 25 4
gpt4 key购买 nike

通常我的函数结构相同:

(defn func-name
([] (some actions))
([ar] (some actions))
([ar aar] (some actions)))

并且通常只有一个变体是公开的。但正如您从我的条目中看到的 - 我的所有函数都是 public 因为使用 defn 而不是 defn-。但是defn-隐藏了所有函数,包括所有重载的函数。

有没有办法只“隐藏”重载函数的一部分?

例如,我想隐藏一个具有一两个参数的函数名称。

Ofcorse 我可以将重载函数隐藏在一个 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)和私有(private)空间使用不同的函数名称。即 func-name 表示公共(public)函数,func-name- 表示私有(private)函数。

关于clojure - 重载的私有(private)函数在 clojure 中是私有(private)的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34365116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com