在 Clojure 代码注释中; 和; 的区别是什么?

在 Clojure 发表评论时,;;;有什么不同?我看到我的 文本编辑器颜色他们不同,所以我假设有一些名义上的差异。

我还看到 边缘对待他们的方式不同:

; 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)
16395 次浏览

I'm not sure (not used Clojure and never heard of this before), but this thread might help.

no meaning for the language. ; is a reader macro for comment perhaps other tools parse them but "within clojure" they are the same.

Emacs ; to be used for end-of-line comments and will indent in surprising ways if that is not your intent. ;; does not so I usually use ;;.

Clojure doesn't care - any line is ignored from the ; to EOL.

I believe there is a tradition in CL of using increasing numbers of ; to indicate more important comments/sections.

There is no difference as far as the interpreter is concerned. Think of ; ;; ;;; and ;;;; as different heading levels.

Here is my personal use convention:

;;;; 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

There is no difference from a Clojure-perspective. I find that ;; stands out a little better than ;, but that's only my opinion.

Marginalia on the other hand treats them differently because there are times when a comment should remain in the code section (e.g. license) and those are flagged with ;. This is an arbitrary decision and may change in the future.

In emacs lisp modes including clojure-mode, ;; is formatted with the convention of being at the beginning of a line, and indented as as any other line, based on the context. ; is expected to be used at the end of a line, so emacs will not do what you want it to if you put a single-semicolon comment at the beginning of a line expecting it to tab to the indentation for the present context.

Example:

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

Check out the official description of the meaning of ; vs ;; in elisp: since the Clojure indenter is basically the same, it will treat them similarly. Basically, use ; if you are writing a long sentence/description "in the margins" that will span multiple lines but should be considered a single entity. Their example is:

(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

The indenter will make sure those stay lined up next to each other. If, instead, you want to make several unrelated single-line comments next to each other, use ;;.

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