ฉันจะแสดงความคิดเห็นหลายบรรทัดใน Clojure ได้อย่างไร?
ฉันจะแสดงความคิดเห็นหลายบรรทัดใน Clojure ได้อย่างไร?
คำตอบ:
จริงๆแล้วมีวิธี!
(comment
(defn hey []
("Hey there!"))
Check me out!
)
เพียงแค่ปิดความคิดเห็นของคุณใน (ความคิดเห็น .. ) :)
มีความสุข!
Clojure รองรับ#_
มาโครผู้อ่านซึ่งข้ามฟอร์มถัดไปโดยสิ้นเชิง นี้จะกล่าวถึงในหน้าเกี่ยวกับClojure อ่าน นอกจากนี้ยังมีมาโครข้อคิดเห็นซึ่งมีผลคล้ายกัน แต่ใช้งานแตกต่างกัน
ทั้งสองข้อข้างต้นต้องการให้สิ่งที่คุณแสดงความคิดเห็นนั้นเป็นนิพจน์ S ที่ถูกต้องตามหลักไวยากรณ์
ภาษา Lisp บางภาษามีความคิดเห็นหลายบรรทัดที่สามารถมีข้อความที่กำหนดเองได้ แต่ฉันไม่เห็นข้อความสำหรับ Clojure
*scratch*
บัฟเฟอร์เพียงพิมพ์ขยะหลัง;
;;
หรือ;;;
หลายบรรทัดวางเคอร์เซอร์ไว้ที่คำแรกหลังอัฒภาคแล้วกดMeta-Q
)
เครื่องหมายคำพูดคู่ (ตัวอักษรสตริง) อนุญาตให้เพิ่มข้อความตามอำเภอใจ (ไม่ใช่เฉพาะรูปแบบ S ที่เหมาะสม)
(comment "
public class HelloWorld {
public static void main(String[] args) {
System.out.print("Hello, World");
System.out.println();
}
}
")
Hello
รูปแบบที่ 3 คือสัญลักษณ์World
และรูปแบบที่ 4 เป็นสตริงอื่น comment
เพียงแค่ละเว้นทุกรูปแบบ ดังนั้นในตัวอย่างเราโชคดีที่Hello, World
แยกวิเคราะห์เป็น clojure ทางกฎหมาย ใช้ไม่ได้กับข้อความที่กำหนดเอง ยกตัวอย่างเช่นจะตายกับข้อผิดพลาด(comment "print("/foo")")
Invalid token: /foo
ตัวอย่างอื่น ๆ ก็เยี่ยมมากฉันอยากจะเพิ่มเคล็ดลับอีกอย่างหนึ่ง:
บางครั้งคุณต้องการแสดงความคิดเห็นเกี่ยวกับโค้ดสองสามบรรทัด แต่ยังคงให้คอมไพเลอร์รวบรวมและรายงานข้อผิดพลาด (เช่นชุดคำสั่งในเนมสเปซระดับบนสุดที่คุณวางแผนจะดำเนินการในภายหลังที่ REPL)
ในกรณีนี้ฉันชอบที่จะตัดโค้ดด้วย(fn [] .....)
ซึ่งหมายความว่ามันยังได้รับการคอมไพล์ แต่ก็ไม่ได้รับการเรียก
ดูลิงค์นี้: http://en.wikibooks.org/wiki/Clojure_Programming/Tutorials_and_Tips
คุณสามารถสร้างความคิดเห็นหลายบรรทัดด้วยไวยากรณ์
(comment .....
....)
เมื่อใช้ emacs และ cider มีคำสั่งM-x comment-region
ที่ฉันใช้บ่อย
ใน Emacs คุณสามารถใช้คำสั่งM-;
(ทางลัดสำหรับM-x comment-dwim
) มันจะแสดงความคิดเห็นหรือยกเลิกการแสดงความคิดเห็นบริเวณที่ทำเครื่องหมายของข้อความ / รหัสดังนั้นตราบใดที่ฟังก์ชันหรือชุดฟังก์ชันทั้งหมดของคุณรวมอยู่ในภูมิภาคคุณสามารถแสดงความคิดเห็นหรือไม่แสดงความคิดเห็นในภูมิภาคนั้นได้อย่างง่ายดาย คู่มืออ้างอิง Emacs สำหรับฟังก์ชั่นM-;
ที่สามารถพบได้ที่นี่
มีหลายวิธีที่ฉันรู้:
อย่างแรกคือใช้มาโครความคิดเห็น : มันไม่ได้ประเมินโค้ดทั้งหมดภายในเนื้อหาความคิดเห็นเท่านั้น (แต่ยังตรวจสอบวงเล็บ / วงเล็บที่สมดุล) หากคุณรู้จักวิธีของคุณด้วย paredit จะไม่ต้องใช้เวลามากนักหากคุณต้องการแสดงความคิดเห็นเกี่ยวกับเรื่องเพศ
(comment
(println 1))
อย่างไรก็ตามจะยังคงตรวจสอบการจับคู่ของวงเล็บ ดังนั้นหากคุณมีวงเล็บที่ไม่สมดุลโค้ดของคุณจะไม่คอมไพล์ (ยอมjava.lang.RuntimeException: EOF while reading
)
อีกวิธีหนึ่งคือการใช้#_
(aka the discard macro): มันจะทิ้ง sexp ถัดไปซึ่งเป็นวิธีที่ฉันชอบเป็นการส่วนตัว (พิมพ์เร็วกว่าและปกติฉันจะทำกับ sexps เมื่อฉันต้องแก้จุดบกพร่อง):
#_(println 1)
นอกจากนี้ยังตรวจสอบตัวคั่นที่ไม่ตรงกันดังนั้นหากคุณมีวงเล็บที่ไม่สมดุลก็จะไม่รวบรวมเช่นกัน
สุดท้ายมี;
อักขระที่จะแสดงความคิดเห็นในบรรทัด (คล้ายกับคุณลักษณะการแสดงความคิดเห็นของภาษาอื่น ๆ ) และการคอมไพล์จะละเว้นโดยสิ้นเชิง หากคุณต้องการแสดงความคิดเห็นหลายบรรทัดคุณต้องนำหน้าบรรทัดทั้งหมดด้วย; ซึ่งโดยปกติจะเป็นเรื่องยุ่งยาก แต่โดยปกติโปรแกรมแก้ไขข้อความจะดำเนินการให้คุณด้วยคำสั่งหลังจากเลือกหลายบรรทัด
; (println 1)
; (println 1 also won't break
สำหรับบล็อกความคิดเห็นแบบยาว Macros #_ หรือ (ความคิดเห็น ... ) ไม่ทำงานตามที่กำหนดไว้ฉันจึงบล็อกความคิดเห็นด้วย VSCODE (OS X)