Блок комментариев в Clojure

Как я могу прокомментировать несколько строк в Clojure?

Ответ 1

Собственно, есть способ!


(comment

(defn hey [] ("Hey there!"))

Check me out! )

Просто обведите свои комментарии в (комментарий..):)

Удачи!

Ответ 2

Clojure поддерживает макрос чтения #_, который полностью пропускает следующую форму. Об этом говорится на странице Clojure Reader. Существует также макрос комментариев , который имеет аналогичный эффект, но реализуется по-разному.

Оба вышеуказанных требуют, чтобы то, что вы комментируете, в остальном является синтаксически правильным S-выражением.

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

Ответ 3

Двойные кавычки (строковый литерал) позволяют добавлять произвольный текст (а не только собственные S-формы):

(comment "

public class HelloWorld {
    public static void main(String[] args) {
        System.out.print("Hello, World");
        System.out.println();
    }
}

")

Ответ 4

Другие примеры великолепны, я просто хотел бы добавить еще один трюк:

Иногда вам нужно прокомментировать несколько строк кода, но компилятор все еще компилирует и сообщает о любых ошибках (например, набор команд в пространстве имен верхнего уровня, которое вы планируете выполнить позже в REPL).

В этом случае мне нравится обертывать код с помощью (fn [] .....), что означает, что он все еще компилируется, он просто не вызван.

Ответ 6

При использовании emacs и сидра есть команда M-x comment-region, которую я часто использую.

Ответ 7

В Emacs вы можете использовать команду M-; (ярлык для M-x comment-dwim). Он будет комментировать или раскомментировать любую отмеченную область текста/кода, поэтому, если ваша функция или набор функций включены в регион, вы можете легко или частично комментировать или раскомментировать этот регион. Справочное руководство Emacs для функции M-; можно найти здесь.

Ответ 8

Я знаю несколько способов:

Сначала используется макрос comment: он только не оценивает весь код внутри (но он все еще проверяет наличие скобок/скобок). Если вы знаете свой путь с paredit, это не займет много времени, если вы хотите прокомментировать несколько звонков sexp.

(comment 
 (println 1))

Тем не менее, он все равно будет проверять соответствие скобок. Поэтому, если у вас есть несбалансированная скобка, код не будет компилироваться (уступая java.lang.RuntimeException: EOF while reading).

Другой способ - использовать #_ (также известный как макрос отбрасывания): он отменит следующий sexp, который я предпочитаю (быстрее набирать, и обычно я делаю это на sexps, когда мне приходится отлаживать):

#_(println 1)

Он также проверяет несогласованные разделители: поэтому, если у вас есть несбалансированная скобка, она также не будет компилироваться.

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

;  (println 1)
;  (println 1 also won't break