В чем разница между ; а также ;; в Clojure комментарии к коду? - PullRequest
63 голосов
/ 23 февраля 2011

В чем разница между ; и ;; при запуске комментария в 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)

Ответы [ 7 ]

72 голосов
/ 23 февраля 2011

Нет никакой разницы в том, что касается переводчика. Думать о ; ;; ;;; а также ;;;; как разные уровни заголовка.

Вот мое соглашение об использовании в личных целях:

;;;; Комментарии уровня начала файла, такие как описание всего файла / модуля / пространства имен

;;; Документация для основных разделов кода (то есть групп функций) в файле.

;; Документация для отдельных функций, выходящая за пределы строки документа (например, объяснение алгоритма внутри функции)

; Встроенные комментарии, возможно, в одну строку, и, возможно, хвост строки кода

28 голосов
/ 11 января 2012

Ознакомьтесь с официальным описанием значения ; против ;; в elisp: поскольку индентор 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 голосов
/ 23 февраля 2011

Emacs;будет использоваться для комментариев в конце строки и будет делать неожиданные отступы, если это не ваше намерение.;;не так я обычно использую ;;.

Clojure не волнует - любая строка игнорируется из;в EOL.

Я считаю, что в CL существует традиция использовать все большее число;указать более важные комментарии / разделы.

7 голосов
/ 23 февраля 2011

не имеет значения для языка.; - это макрос считывателя для comment, возможно, другие инструменты их анализируют, но "в пределах clojure" они одинаковы.

6 голосов
/ 23 февраля 2011

Нет никакой разницы с точки зрения Clojure. Я считаю, что ;; немного лучше, чем ;, но это только мое мнение.

Маргиналии, с другой стороны, относятся к ним по-разному, потому что в некоторых случаях комментарии должны оставаться в разделе кода (например, в лицензии), и они помечаются ;. Это произвольное решение, которое может измениться в будущем.

5 голосов
/ 28 февраля 2011

В режимах lisp emacs, включая clojure-mode, ;; форматируется с условием нахождения в начале строки и с отступом, как и любая другая строка, в зависимости от контекста. Ожидается, что ; будет использоваться в конце строки, поэтому emacs не будет делать то, что вы хотите, если вы поместите комментарий в одну точку с запятой в начале строки, ожидая, что он будет вставлен в отступ для текущего контекста .

Пример:

(let [foo 1]
  ;; a comment
  foo) ; a comment
1 голос
/ 23 февраля 2011

Я не уверен (не использовал Clojure и никогда не слышал об этом раньше), но эта тема может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...