Ответы:
Собственно, выход есть!
(comment
(defn hey []
("Hey there!"))
Check me out!
)
Просто оберните свои комментарии в (комментарий ..) :)
Радоваться, веселиться!
Clojure поддерживает #_
макрос чтения, который полностью пропускает следующую форму. Об этом упоминается на странице о Clojure Reader . Также существует макрос комментария, который имеет аналогичный эффект, но реализован по-другому.
Оба вышеперечисленного требуют, чтобы комментируемая вами вещь была синтаксически правильным S-выражением.
Некоторые диалекты Лиспа имеют многострочный комментарий, который может содержать произвольный текст, но я не вижу его для Clojure.
*scratch*
буфере просто набираю мусор после ;
;;
или ;;;
на нескольких строках, помещаю курсор на первое слово после точки с запятой и нажимаю Meta-Q
).
Двойные кавычки (строковый литерал) позволяют добавлять произвольный текст (не только правильные S-формы):
(comment "
public class HelloWorld {
public static void main(String[] args) {
System.out.print("Hello, World");
System.out.println();
}
}
")
Hello
, третья форма - это символ World
и четвертая форма - это еще одна строка. comment
просто игнорирует все формы. Итак, в этом примере нам повезло, что он Hello, World
разбирается как законное закрытие. Не работает с произвольным текстом. Например, (comment "print("/foo")")
умрет с ошибкой Invalid token: /foo
.
Другие примеры отличные, я просто хочу добавить еще одну хитрость:
Иногда вы хотите закомментировать несколько строк кода, но все же компилятор скомпилирует его и сообщит о любых ошибках (например, о наборе команд в пространстве имен верхнего уровня, которые вы планируете выполнить позже в REPL).
В этом случае мне нравится заключать код в оболочку, (fn [] .....)
что означает, что он все еще компилируется, он просто не вызывается.
См. Эту ссылку: http://en.wikibooks.org/wiki/Clojure_Programming/Tutorials_and_Tips
Вы можете создавать многострочные комментарии с синтаксисом
(comment .....
....)
В Emacs вы можете использовать команду M-;
(ярлык для M-x comment-dwim
). Он будет комментировать или раскомментировать любую отмеченную область текста / кода, поэтому, пока вся ваша функция или набор функций включены в область, вы можете легко прокомментировать или раскомментировать эту область. Справочное руководство Emacs для этой функции M-;
можно найти здесь .
Я знаю несколько способов:
Во-первых, используется макрос комментария : он только не оценивает весь код внутри тела комментария (но по-прежнему проверяет наличие сбалансированных скобок / скобок). Если вы знаете свой путь с paredit, это не займет много времени, если вы захотите прокомментировать несколько вызовов sexp.
(comment
(println 1))
Однако он все равно будет проверять соответствие скобок. Поэтому, если у вас несбалансированные круглые скобки, ваш код не будет компилироваться (даваяjava.lang.RuntimeException: EOF while reading
).
Другой способ - использовать #_
(также известный как макрос discard): он отбрасывает следующий sexp, что я лично предпочитаю (быстрее набирать, и обычно я делаю это на sexps, когда мне нужно отлаживать):
#_(println 1)
Он также проверяет наличие несовпадающих разделителей: поэтому, если у вас несбалансированные круглые скобки, он также не будет компилироваться.
Наконец, есть ;
символ, который будет комментировать строку (аналогично функциям комментариев на других языках), и компиляция полностью его проигнорирует. Если вы хотите прокомментировать несколько строк, вам нужно добавить перед всеми строками; , которые обычно доставляют хлопот, но обычно текстовые редакторы сделают это за вас с помощью команды после выбора нескольких строк.
; (println 1)
; (println 1 also won't break
Для длинного блока комментариев макросы #_ или (комментарий ...) не работали должным образом, затем я сделал блок комментариев с помощью VSCODE (OS X).