之间有什么区别?和;; 在Clojure代码注释中?


72

在Clojure中发表评论;和之间有什么区别;;?我看到我的文本编辑器为它们涂上了不同的颜色,所以我假设在概念上存在一些差异。

我也看到Marginalia对待他们的方式有所不同:

; Stripped entirely
;; Appears in text section of marginalia
(defn foobar []
   ; Appears in code section of marginalia output
   ;; Again, appears in code section of marginalia output
   6)

Answers:


80

就口译员而言,没有区别。将; ;; ;;;;;;;视为不同的标题级别。

这是我的个人使用习惯:

;;;; Top-of-file level comments, such as a description of the whole file/module/namespace

;;; Documentation for major code sections (i.e. groups of functions) within the file.

;; Documentation for single functions that extends beyond the doc string (e.g. an explanation of the algorithm within the function)

; In-line comments possibly on a single line, and possibly tailing a line of code

考虑到投票数,我想我必须将其标记为正确。外部引用会很好,但是我想这是不成文的文化。:)
pauldoo 2011年

4
作为参考,Good Lisp编程风格的作者Peter Norvig将该约定称为“近标准”。stackoverflow.com/a/4531930/603891
orftz 2012年

1
那为什么;在文档中没有提到单身呢?clojuredocs.org/clojure.core/comment
Matanster

@matanster该链接是关于(注释)而不是;。但是FTR最大的示例第二段确实讨论了单个;。有关的规范文档; 阅读器宏检查clojure.org/reference/reader#macrochars
G__18年

31

查看有关elisp中vs含义的官方描述:由于Clojure压头基本相同,因此将对它们进行类似的处理。基本上,如果您要写一个较长的句子/说明(在“空白处”),该句子/说明将跨越多行,但应被视为单个实体,则可以使用。他们的例子是:;;;;

(setq base-version-list                 ; there was a base
      (assoc (substring fn 0 start-vn)  ; version to which
             file-version-assoc-list))  ; this looks like
                                        ; a subversion

压头将确保那些排成一排并排。相反,如果您要彼此相邻地做几个不相关的单行注释,请使用;;

(let [x 99 ;; as per ticket #425
      y "test"] ;; remember to test this
  (str x y)) ;; TODO actually write this function

14

埃马克斯; 用于行尾注释,如果不是您的意图,则会以令人惊讶的方式缩进。;; 并非如此,我通常使用;;。

Clojure不在乎-忽略任何行;停产。

我相信CL的传统是使用越来越多的; 指出更重要的评论/部分。


7

语言没有意义。;comment 可能是其他工具解析它们的读者宏,但“在clojure之内”它们是相同的。


6

与Clojure的观点没有区别。我发现该方法;;比的要好一些;,但这只是我的意见。

另一方面,Marginalia则对它们进行了不同的处理,因为有时注释应保留在代码部分(例如许可证)中,并用标记;。这是一个任意决定,将来可能会更改。


3
迷糊,注意亚历克斯·米勒对emacs的评论。缩进单; 评论但没有; 要么 ;;; 如果您自己不使用emacs,则应了解其自动缩进方案的作用,因为许多目标用户都会使用。
约翰·劳伦斯·阿斯普登

5

在emacs中,包括clojure-mode在内的lisp模式的;;格式约定为:在一行的开头,并根据上下文与其他任何行一样缩进。;预期将在行的末尾使用,因此如果您在行的开头放置一个分号注释,并期望在当前上下文中缩进,则emacs将不会执行您想要的操作。

例:

(let [foo 1]
  ;; a comment
  foo) ; a comment

1

我不确定(未使用Clojure,之前从未听说过),但是此线程 可能会有所帮助。


这些样式看起来与可变宽度字体完全不兼容。我希望Clojure社区没有采用列对齐方式发表评论。
pauldoo 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.