บล็อกความคิดเห็นใน Clojure


คำตอบ:


145

จริงๆแล้วมีวิธี!


(comment

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

Check me out! )

เพียงแค่ปิดความคิดเห็นของคุณใน (ความคิดเห็น .. ) :)

มีความสุข!


4
ฉันคิดว่า id คิดถึง # || # ของฉัน แต่เป็นวิธีที่ดีกว่า
unj2

4
ฉันหวังว่าคุณจะสนุกกับ Clojure :)
Rayne

14
คำเตือน: ดูเหมือนว่าสิ่งที่อยู่ใน (ความคิดเห็น ... ) จะต้องเป็นรูปแบบที่เหมาะสม เช่น (แสดงความคิดเห็นสวัสดี: world) ก็ดี แต่ (แสดงความคิดเห็นสวัสดี: world) ให้ข้อยกเว้น [แก้ไข:] ดูเหมือนว่าฉันควรจะอ่านคำตอบของ Greg Hewgill ก่อนที่จะโพสต์ความคิดเห็นนี้ ... เอาล่ะฉันจะปล่อยไว้ก่อนเผื่อว่าจะมีคนทำแบบเดียวกับฉัน
พอล

19
คำเตือน - มาโคร (ความคิดเห็น) ขยายเป็นศูนย์ ใช้ #_ เพื่อแสดงความคิดเห็นในรูปแบบเดียวหรือ #_ (ความคิดเห็น ... ) เพื่อแสดงความคิดเห็นหลายรูปแบบโดยไม่ต้องใส่ศูนย์
ดูแลม็อดของคุณให้ดี

มันจำฉันได้มาโครนี้: stackoverflow.com/questions/3732173/…
เฟลิเป้

100

Clojure รองรับ#_มาโครผู้อ่านซึ่งข้ามฟอร์มถัดไปโดยสิ้นเชิง นี้จะกล่าวถึงในหน้าเกี่ยวกับClojure อ่าน นอกจากนี้ยังมีมาโครข้อคิดเห็นซึ่งมีผลคล้ายกัน แต่ใช้งานแตกต่างกัน

ทั้งสองข้อข้างต้นต้องการให้สิ่งที่คุณแสดงความคิดเห็นนั้นเป็นนิพจน์ S ที่ถูกต้องตามหลักไวยากรณ์

ภาษา Lisp บางภาษามีความคิดเห็นหลายบรรทัดที่สามารถมีข้อความที่กำหนดเองได้ แต่ฉันไม่เห็นข้อความสำหรับ Clojure


20
ไม่มีแบบฟอร์มแสดงความคิดเห็นข้อความโดยพลการหลายบรรทัด Clojure ฉันส่งแพตช์เพิ่ม # | ...... | # ความคิดเห็น แต่ถูกปฏิเสธเนื่องจากไม่ใช่คุณสมบัติที่ต้องการ ดังนั้นจึงไม่น่าจะเพิ่มได้เร็ว ๆ นี้
amalloy

5
@amalloy: เหตุผลคืออะไร? ไม่จำเป็นหรือมีการคัดค้าน?
Ted

2
ฉันมักเขียนความคิดเห็นยาว ๆ โดยเลียนแบบรูปแบบการเขียนโปรแกรมแบบรู้หนังสือ ฉันแค่ใช้ emac เพื่อเลื่อนความคิดเห็นหลายบรรทัดอีกครั้ง (ใน*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
เคล็ดลับที่ดีสำหรับฉัน! แต่เป็นไปได้อย่างไรที่คำพูดของ "สวัสดีชาวโลก" ไม่จำเป็นต้องหนี?
มาราธอน

6
มันเป็นเพียงโชค ตัวอย่างของ Ivan แยกวิเคราะห์ออกเป็น 4 รูปแบบ: รูปแบบแรกคือสตริงรูปแบบที่สองคือสัญลักษณ์Helloรูปแบบที่ 3 คือสัญลักษณ์Worldและรูปแบบที่ 4 เป็นสตริงอื่น commentเพียงแค่ละเว้นทุกรูปแบบ ดังนั้นในตัวอย่างเราโชคดีที่Hello, Worldแยกวิเคราะห์เป็น clojure ทางกฎหมาย ใช้ไม่ได้กับข้อความที่กำหนดเอง ยกตัวอย่างเช่นจะตายกับข้อผิดพลาด(comment "print("/foo")") Invalid token: /foo
John Wiseman

17

ตัวอย่างอื่น ๆ ก็เยี่ยมมากฉันอยากจะเพิ่มเคล็ดลับอีกอย่างหนึ่ง:

บางครั้งคุณต้องการแสดงความคิดเห็นเกี่ยวกับโค้ดสองสามบรรทัด แต่ยังคงให้คอมไพเลอร์รวบรวมและรายงานข้อผิดพลาด (เช่นชุดคำสั่งในเนมสเปซระดับบนสุดที่คุณวางแผนจะดำเนินการในภายหลังที่ REPL)

ในกรณีนี้ฉันชอบที่จะตัดโค้ดด้วย(fn [] .....)ซึ่งหมายความว่ามันยังได้รับการคอมไพล์ แต่ก็ไม่ได้รับการเรียก




2

ใน Emacs คุณสามารถใช้คำสั่งM-;(ทางลัดสำหรับM-x comment-dwim) มันจะแสดงความคิดเห็นหรือยกเลิกการแสดงความคิดเห็นบริเวณที่ทำเครื่องหมายของข้อความ / รหัสดังนั้นตราบใดที่ฟังก์ชันหรือชุดฟังก์ชันทั้งหมดของคุณรวมอยู่ในภูมิภาคคุณสามารถแสดงความคิดเห็นหรือไม่แสดงความคิดเห็นในภูมิภาคนั้นได้อย่างง่ายดาย คู่มืออ้างอิง Emacs สำหรับฟังก์ชั่นM-;ที่สามารถพบได้ที่นี่


2

มีหลายวิธีที่ฉันรู้:

อย่างแรกคือใช้มาโครความคิดเห็น : มันไม่ได้ประเมินโค้ดทั้งหมดภายในเนื้อหาความคิดเห็นเท่านั้น (แต่ยังตรวจสอบวงเล็บ / วงเล็บที่สมดุล) หากคุณรู้จักวิธีของคุณด้วย 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

0

สำหรับบล็อกความคิดเห็นแบบยาว Macros #_ หรือ (ความคิดเห็น ... ) ไม่ทำงานตามที่กำหนดไว้ฉันจึงบล็อกความคิดเห็นด้วย VSCODE (OS X)

  1. ไฮไลต์บล็อกความคิดเห็น
  2. กดคำสั่ง + shift + p ใน vscode
  3. หา "แอดไลน์คอมเม้น"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.