重载私有函数,它是clojure中的私有函数

时间:2015-12-18 22:50:18

标签: clojure clojurescript overloading private-functions

通常我的功能结构相同:

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

通常只有一个变体是public。但正如您从我的参赛作品中看到的那样 - 由于使用public代替defn,我的所有功能都是defn-。但defn-隐藏所有功能,包括所有重载。

有没有办法'隐藏'只有部分重载功能?

例如,我想隐藏一个带有一个和两个参数的arity的func-name。

Ofcorse我可以隐藏一个defn内的重载函数,如下所示:

(defn awesome[]
  (let [func (fn some-func ([] (some actions))
               ([ar] (some actions)))]
    (func)))

但我认为这有点乱,我确信必须有办法解决它。

谢谢!

1 个答案:

答案 0 :(得分:3)

据我所知,此可见性由var $trigger = New-ScheduledTaskTrigger ` -Once ` -At (Get-Date) ` -RepetitionInterval (New-TimeSpan -Minutes 5) ` -RepetitionDuration ([System.TimeSpan]::MaxValue) 中的:private标志定义。所以这两个表达式是相同的:

meta

所以我认为你只能控制整个(defn ^:private foo [] "bar") (defn- foo [] "bar") 的可见性。

我可以建议为公共和私人空间使用不同的函数名称。 I.e var用于公开,func-name用于私有。