Clojure中是否有命名私有函数的约定?

36

在Clojure中定义私有函数时,我通常使用-前缀作为可视化指示器,表示该函数不能在我的命名空间之外使用,例如:

(defn- -name []
  (let [formatter (formatter "yyyy-MM-dd-HH-mm-ss-SSSS")]
    (format "fixjure-%s" (unparse formatter (now)))))

然而,当使用gen-class时,-前缀似乎也是公共方法的惯例。

在Clojure社区中是否有任何通常被接受的约定用于defn-定义的函数?或者我应该只使用非前缀名称?

看起来在clojure.contrib(它已经不再更新)中的很多代码使用普通名称来定义私有函数,因此也许这是最好的做法,但我真的很喜欢这种视觉指示符-也许是因为我太熟悉C / Perl? ;)

2个回答

49

没有一种固定的惯例;在没有内置私有函数概念的语言中,可视指示器很常见。由于Clojure使用defn-定义的函数在其命名空间之外不可见,因此无需为函数添加丑化前缀 ;)

所以你可以做任何你想做的,但是你可能希望像其他社区成员一样只是正常地命名它们!这会让你的生活更轻松。


1
多么美妙的语言设计! - Jorge Tovar

25

我不知道是否存在任何命名惯例,但是您可以使用^:private元数据标签来定义私有函数。这与defn-完全相同,但是在我看来更加清晰。

(defn ^:private foo [])

1
而要为当前命名空间执行此操作:(def ^:private -ns- *ns*) - nuaavee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接