有什么区别; 和;; 在Clojure代码评论?

pau*_*doo 65 comments clojure marginalia

在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)
Run Code Online (Sandbox Code Playgroud)

G__*_*G__ 73

就翻译而言,没有区别.考虑到 ; ;; ;;; 和;;;; 作为不同的标题水平.

这是我的个人使用惯例:

;;;; 文件顶级注释,例如整个文件/模块/命名空间的描述

;;; 文件中主要代码部分(即函数组)的文档.

;; 超出doc字符串的单个函数的文档(例如函数内算法的解释)

; 内联注释可能在一行上,并可能拖尾一行代码

  • 作为参考,作为*Good Lisp Programming Style*的作者Peter Norvig,在许多其他事物中,将此约定称为"近标准".http://stackoverflow.com/a/4531930/603891 (4认同)

ama*_*loy 30

查看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
Run Code Online (Sandbox Code Playgroud)

压头将确保它们彼此相邻排列.相反,如果您想要将几个不相关的单行注释彼此相邻,请使用;;.

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


Ale*_*ler 14

Emacs; 用于行尾注释,如果不是你的意图,将以令人惊讶的方式缩进.;; 不这样我通常使用;;.

Clojure不关心 - 任何一行都被忽略了; 到了EOL.

我相信在CL中有一种使用越来越多的传统; 表示更重要的评论/部分.


Art*_*ldt 7

对语言毫无意义. 可能是其他工具解析它们;的读者宏,comment但"在clojure中"它们是相同的.


fog*_*gus 6

与Clojure的观点没有区别.我发现它;;比一个好一点;,但这只是我的意见.

另一方面,Marginalia对待它们的方式不同,因为有时评论应该保留在代码部分(例如许可证)中,并且标记为;.这是一个武断的决定,将来可能会发生变化.

  • 雾,请注意亚历克斯米勒关于emacs的评论.它缩进单一; 评论但不是;; 要么 ;;; 如果你自己不使用emacs,你应该知道它的自动缩进方案有什么用,因为你的很多目标用户都会这样做. (3认同)

rpl*_*evy 5

在emacs中,包括clojure-mode在内的lisp模式的;;格式是使用位于行开头的约定,并根据上下文缩进为任何其他行.;预计将在一行的末尾使用,因此如果您在行的开头放置一个单分号注释,期望它选择缩进到当前上下文的缩进,则emacs将无法执行您想要的操作.

例:

(let [foo 1]
  ;; a comment
  foo) ; a comment
Run Code Online (Sandbox Code Playgroud)