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.
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.
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();
}
}
")
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.
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 .
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.
Untuk blok komentar yang panjang, Makro #_ atau (komentar ...) tidak berfungsi sebagaimana mestinya, maka saya melakukan blok komentar dengan VSCODE (OS X).
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.
sumber
*scratch*
buffer, cukup ketik beberapa sampah setelah;
;;
atau;;;
di beberapa baris, letakkan kursor di kata pertama setelah titik koma, dan tekanMeta-Q
).Tanda kutip ganda (string literal) memungkinkan penambahan teks arbitrer (tidak hanya bentuk S yang tepat):
sumber
Hello
, bentuk ke-3 adalah simbolWorld
, dan bentuk ke-4 adalah string lainnya.comment
mengabaikan semua bentuk. Jadi dalam contoh ini kami beruntung dapatHello, World
mengurai sebagai jubah hukum. Itu tidak bekerja dengan teks yang berubah-ubah. Misalnya(comment "print("/foo")")
akan mati dengan errorInvalid token: /foo
.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.sumber
Lihat tautan ini: http://en.wikibooks.org/wiki/Clojure_Programming/Tutorials_and_Tips
Anda dapat membuat komentar multiline dengan sintaks
sumber
Saat menggunakan emacs dan cider, ada perintah
M-x comment-region
yang sering saya gunakan.sumber
Di Emacs Anda dapat menggunakan perintah
M-;
(pintasan untukM-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 tersebutM-;
dapat ditemukan di sini .sumber
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.
Namun, itu masih akan memeriksa kecocokan tanda kurung. Jadi jika Anda memiliki tanda kurung yang tidak seimbang, kode Anda tidak akan dikompilasi (menghasilkan
java.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):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.sumber
Untuk blok komentar yang panjang, Makro #_ atau (komentar ...) tidak berfungsi sebagaimana mestinya, maka saya melakukan blok komentar dengan VSCODE (OS X).
sumber