Blokir Komentar di Clojure

119

Bagaimana cara mengomentari beberapa baris di Clojure?

unj2
sumber

Jawaban:

145

Sebenarnya ada jalan!


(comment

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

Check me out! )

Cukup bungkus komentar Anda di (komentar ..) :)

Selamat bersenang-senang!

Rayne
sumber
4
Saya pikir saya merindukan # || # saya tapi ini jauh lebih baik.
unj2
4
Saya harap Anda bersenang-senang dengan Clojure. :)
Rayne
14
Peringatan: sepertinya apapun yang ada di dalam (komentar ...) harus dalam bentuk yang tepat; misalnya (komentar halo: dunia) baik-baik saja tetapi (komentar halo: dunia) menghasilkan pengecualian. [Sunting:] Sepertinya saya harus membaca jawaban dari Greg Hewgill sebelum memposting komentar ini ... oh baiklah, saya akan tetap membiarkannya jika seseorang melakukan hal yang sama dengan saya.
paul
19
Sebuah kata peringatan - makro (komentar) meluas ke nol. Gunakan #_ untuk mengomentari formulir tunggal, atau #_ (komentar ...) untuk mengomentari beberapa formulir tanpa memasukkan nol.
perlakukan mod Anda dengan baik
Ia mengingat saya makro ini: stackoverflow.com/questions/3732173/…
Felipe
100

Clojure mendukung #_makro pembaca yang sepenuhnya melompati formulir berikutnya. Ini disebutkan di halaman tentang Pembaca Jubah . Ada juga makro komentar yang memiliki efek serupa, tetapi diterapkan secara berbeda.

Kedua hal di atas mengharuskan hal yang Anda komentari jika tidak adalah ekspresi-S yang benar secara sintaksis.

Beberapa dialek Lisp memiliki komentar multi-baris yang dapat berisi teks sembarang, tetapi saya tidak melihat satu pun untuk Clojure.

Greg Hewgill
sumber
20
Formulir komentar teks arbitrer multi-baris Clojure tidak ada. Saya mengirimkan tambalan dengan menambahkan # | ...... | # komentar, tetapi itu ditolak karena bukan fitur yang diinginkan. Jadi, sepertinya tidak akan ditambahkan dalam waktu dekat.
amalloy
5
@amalloy: Apa alasannya? Hanya tidak diperlukan, atau ada keberatan?
Ted
2
Saya sering menulis komentar yang panjang dengan meniru gaya pemrograman terpelajar. Saya hanya menggunakan emacs untuk mengalirkan ulang komentar multiline (di *scratch*buffer, cukup ketik beberapa sampah setelah ; ;;atau ;;;di beberapa baris, letakkan kursor di kata pertama setelah titik koma, dan tekan Meta-Q).
Reb.Cabin
25

Tanda kutip ganda (string literal) memungkinkan penambahan teks arbitrer (tidak hanya bentuk S yang tepat):

(comment "

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

")
Ivan Sviatenko
sumber
4
trik bagus yang berhasil untuk saya! Tapi bagaimana mungkin kutipan pada "Hello World" tidak perlu di-escape?
maraton
6
Itu hanya keberuntungan. Contoh Ivan menguraikan menjadi 4 bentuk: Bentuk pertama adalah string, bentuk kedua adalah simbol Hello, bentuk ke-3 adalah simbol World, dan bentuk ke-4 adalah string lainnya. commentmengabaikan semua bentuk. Jadi dalam contoh ini kami beruntung dapat Hello, Worldmengurai sebagai jubah hukum. Itu tidak bekerja dengan teks yang berubah-ubah. Misalnya (comment "print("/foo")")akan mati dengan error Invalid token: /foo.
John Wiseman
17

Contoh lain bagus, saya hanya ingin menambahkan satu trik lagi:

Kadang-kadang Anda ingin memberi komentar pada beberapa baris kode, tetapi masih meminta kompilator mengkompilasinya dan melaporkan kesalahan apa pun (misalnya sekumpulan perintah di namespace tingkat atas yang Anda rencanakan untuk dieksekusi nanti di REPL).

Dalam hal ini saya suka membungkus kode (fn [] .....)yang artinya masih dikompilasi, itu tidak dipanggil.

mikera
sumber
9

Saat menggunakan emacs dan cider, ada perintah M-x comment-regionyang sering saya gunakan.

claj
sumber
2

Di Emacs Anda dapat menggunakan perintah M-;(pintasan untuk M-x comment-dwim). Ini akan mengomentari atau menghapus komentar di wilayah teks / kode yang ditandai, jadi, selama seluruh fungsi atau rangkaian fungsi Anda disertakan di wilayah tersebut, Anda dapat mengomentari atau menghapus komentar di wilayah itu dengan mudah. Panduan referensi Emacs untuk fungsi tersebut M-;dapat ditemukan di sini .

MLev
sumber
2

Ada beberapa cara yang saya tahu:

Yang pertama adalah menggunakan makro komentar : hanya tidak mengevaluasi semua kode di dalam badan komentar (tetapi masih memeriksa tanda kurung / tanda kurung yang seimbang). Jika Anda tahu cara menggunakan paredit, tidak perlu banyak waktu jika Anda ingin berkomentar beberapa panggilan sexp.

(comment 
 (println 1))

Namun, itu masih akan memeriksa kecocokan tanda kurung. Jadi jika Anda memiliki tanda kurung yang tidak seimbang, kode Anda tidak akan dikompilasi (menghasilkanjava.lang.RuntimeException: EOF while reading ).

Cara lain adalah menggunakan #_(alias makro buang): ini akan membuang sexp berikutnya, yang merupakan cara saya pribadi lebih suka (lebih cepat untuk mengetik dan biasanya saya melakukannya pada sexps ketika saya harus men-debug):

#_(println 1)

Ini juga memeriksa pembatas yang tidak cocok: jadi jika Anda memiliki tanda kurung yang tidak seimbang, itu tidak akan dapat dikompilasi juga.

Terakhir, ada ;karakter yang akan mengomentari baris (mirip dengan fitur komentar bahasa lain) dan kompilasi akan mengabaikannya sepenuhnya. Jika Anda ingin mengomentari beberapa baris, Anda perlu menambahkan semua baris dengan; , yang biasanya merepotkan, tetapi biasanya editor teks akan melakukannya untuk Anda dengan perintah setelah memilih beberapa baris.

;  (println 1)
;  (println 1 also won't break
Rodrigo Flores
sumber
0

Untuk blok komentar yang panjang, Makro #_ atau (komentar ...) tidak berfungsi sebagaimana mestinya, maka saya melakukan blok komentar dengan VSCODE (OS X).

  1. Sorot blok komentar.
  2. tekan perintah + shift + p di vscode.
  3. temukan "Tambahkan Komentar Baris"
madeinQuant
sumber