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


Відповіді:


145

Власне, спосіб є!


(comment

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

Check me out! )

Просто загорніть свої коментарі (коментар ..) :)

Веселіться!


4
Я думав, що я сумую за своїм # || #, але це набагато краще.
unj2

4
Я сподіваюся, що ви розважаєтеся з Clojure. :)
Rayne

14
Слово обережності: схоже, що все, що знаходиться всередині (коментар ...), має бути належною формою; наприклад (коментар привіт: світ) добре, але (коментар привіт: світ) дає виняток. [Редагувати]] Схоже, я мав би прочитати відповідь Грега Хьюгілла, перш ніж публікувати цей коментар ... о, добре, я все одно залишу його, якщо хтось зробить те саме, що я зробив.
Павло

19
Слово попередження - макрос (коментар) розширюється до нуля. Використовуйте #_, щоб коментувати одну форму, або #_ (коментар ...), щоб коментувати кілька форм, не вставляючи нуль.
добре

Мені це запам'ятовується цей макрос: stackoverflow.com/questions/3732173/…
Феліпе,

100

Clojure підтримує #_макрос читача, який повністю пропускає наступну форму. Про це йдеться на сторінці про читач Clojure . Існує також макрос коментарів, який має подібний ефект, але реалізується по-різному.

І вище, і інше вимагають, щоб те, що ви коментуєте, інакше було синтаксично правильним S-виразом.

Деякі діалекти Ліспа мають багаторядковий коментар, який може містити довільний текст, але я не бачу жодного для Clojure.


20
Формування багаторядкового довільного текстового коментаря Clojure не існує. Я подав виправлення, додавши # | ...... | # коментарів, але його було відхилено як не бажану функцію. Тому навряд чи можна буде додати його найближчим часом.
amalloy

5
@amalloy: Що було обґрунтуванням? Просто не потрібно, чи було заперечення?
Тед

2
Я часто пишу тривалі коментарі в імітації грамотного стилю програмування. Я просто використовую emacs для повторного перегляду багатолінійних коментарів (у *scratch*буфер просто введіть кілька небажаних файлів після ; ;;чи ;;;в декількох рядках, поставте курсор на перше слово після крапки з комою та натисніть Meta-Q).
Reb.Cabin

25

Подвійні лапки (рядкові букви) дозволяють додавати довільний текст (не тільки належні S-форми):

(comment "

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

")

4
приємний трюк, який працював на мене! Але як можливо, цитати на "Hello World" не потрібно уникати?
марафон

6
Це просто удача. Приклад Івана розбирається на 4 форми: Перша форма - це рядок, друга форма - символ Hello, 3-я форма - символ World, а 4-я форма - інша. commentпросто ігнорує всі форми. Тож у прикладі нам пощастило, що Hello, Worldрозбирається як юридична роль. Він не працює з довільним текстом. Наприклад, (comment "print("/foo")")помре з помилкою Invalid token: /foo.
Джон Вісман

17

Інші приклади чудові, я хотів би додати ще один трюк:

Іноді ви хочете прокоментувати кілька рядків коду, але компілятор все-таки повинен скомпілювати його і повідомити про будь-які помилки (наприклад, набір команд у просторі імен верхнього рівня, які ви плануєте виконати пізніше в REPL).

У цьому випадку мені подобається обернути код, (fn [] .....)що означає, що він все ще збирається, він просто не викликається.



9

Під час використання emacs та сидру є команда, M-x comment-regionяку я часто використовую.


2

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


2

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

Спочатку використовується макрос коментарів : він не оцінює весь код всередині коментованого органу (але він все ще перевіряє збалансованість дужок / дужок). Якщо ви знаєте свій шлях з паритетом, це не займе багато часу, якщо ви хочете прокоментувати кілька сексуальних дзвінків.

(comment 
 (println 1))

Однак він все одно перевірятиме відповідність дужок. Отже, якщо у вас незбалансована дужка, код не буде компілюватися (поступається java.lang.RuntimeException: EOF while reading).

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

#_(println 1)

Він також перевіряє наявність невідмінних роздільників: тому, якщо у вас є незбалансована дужка, вона також не буде компілюватися.

Нарешті, є ;символ, який буде коментувати рядок (подібно до функції коментування інших мов), і компіляція повністю ігнорує його. Якщо ви хочете прокоментувати кілька рядків, вам потрібно додати всі рядки; , як правило, це неприємно, але зазвичай редактори тексту зроблять це за допомогою команди після вибору кількох рядків.

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

0

Для довгого блоку коментарів макроси #_ або (коментар ...) не працювали так само власним чином, тоді я зробив блок коментарів із VSCODE (OS X).

  1. Виділіть блок коментарів.
  2. натисніть команду + shift + p у vscode.
  3. знайти "Додати коментар до рядка"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.