Blokir Komentar di Clojure


119

Bagaimana cara mengomentari beberapa baris di Clojure?

Jawaban:


145

Sebenarnya ada jalan!


(comment

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

Check me out! )

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

Selamat bersenang-senang!


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.


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();
    }
}

")

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.



9

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


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 .


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

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"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.