Chặn nhận xét trong Clojure


119

Làm cách nào để nhận xét nhiều dòng trong Clojure?

Câu trả lời:


145

Trên thực tế, có một cách!


(comment

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

Check me out! )

Chỉ cần tóm tắt ý kiến ​​của bạn trong (bình luận ..) :)

Chúc vui vẻ!


4
Tôi nghĩ rằng id bỏ lỡ # || # của tôi nhưng cách này tốt hơn.
unj2

4
Tôi hy vọng bạn đang vui vẻ với Clojure. :)
Rayne 28-07-09

14
Một lời cảnh báo: có vẻ như bất cứ thứ gì bên trong (bình luận ...) cần phải ở dạng thích hợp; ví dụ: (bình luận xin chào: thế giới) là tốt nhưng (bình luận xin chào: thế giới) dẫn đến một ngoại lệ. [Chỉnh sửa:] Có vẻ như tôi nên đọc câu trả lời của Greg Hewgill trước khi đăng bình luận này ... ồ, tôi sẽ để lại nó trong trường hợp ai đó làm điều tương tự như tôi đã làm.
paul

19
Một lời cảnh báo - macro (bình luận) mở rộng thành nil. Sử dụng #_ để nhận xét một biểu mẫu hoặc #_ (nhận xét ...) để nhận xét nhiều biểu mẫu mà không cần chèn số không.
điều trị mods của bạn tốt

Nó ghi nhớ tôi macro này: stackoverflow.com/questions/3732173/…
Felipe,

100

Clojure hỗ trợ #_macro người đọc bỏ qua hoàn toàn biểu mẫu tiếp theo. Điều này được đề cập trên trang về Clojure Reader . Ngoài ra còn có macro chú thích có tác dụng tương tự, nhưng được triển khai khác.

Cả hai điều trên đều yêu cầu rằng thứ mà bạn đang bình luận phải là một biểu thức S chính xác về mặt cú pháp.

Một số phương ngữ Lisp có chú thích nhiều dòng có thể chứa văn bản tùy ý, nhưng tôi không thấy chú thích nào cho Clojure.


20
Biểu mẫu nhận xét văn bản tùy ý nhiều dòng Clojure không tồn tại. Tôi đã gửi một bản vá bổ sung # | ...... | # nhận xét, nhưng nó đã bị từ chối vì không phải là một tính năng mong muốn. Vì vậy, nó khó có thể sớm được thêm vào bất cứ lúc nào.
amalloy

5
@amalloy: Cơ sở lý luận là gì? Chỉ là không cần thiết, hoặc có một phản đối?
Ted

2
Tôi thường viết những bình luận dài dòng theo phong cách lập trình đơn giản. Tôi chỉ sử dụng emacs để chuyển dòng nhận xét nhiều dòng (trong *scratch*bộ đệm, chỉ cần nhập một số mẩu tin rác sau ; ;;hoặc ;;;trên nhiều dòng, đặt con trỏ vào từ đầu tiên sau dấu chấm phẩy và nhấn Meta-Q).
Reb.Cabin

25

Dấu ngoặc kép (chuỗi ký tự) cho phép thêm văn bản tùy ý (không chỉ các dạng S thích hợp):

(comment "

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

")

4
mẹo hay đã làm việc cho tôi! Nhưng làm thế nào mà các trích dẫn trong "Hello World" không cần phải được thoát ra?
marathon

6
Đó chỉ là may mắn. Ví dụ của Ivan phân tích thành 4 dạng: Dạng thứ nhất là một chuỗi, dạng thứ hai là biểu tượng Hello, dạng thứ 3 là biểu tượng World, và dạng thứ 4 là một chuỗi khác. commentchỉ cần bỏ qua tất cả các hình thức. Vì vậy, trong ví dụ, chúng tôi may mắn rằng Hello, Worldphân tích cú pháp là áo choàng hợp pháp. Nó không hoạt động với văn bản tùy ý. Ví dụ, (comment "print("/foo")")sẽ chết với lỗi Invalid token: /foo.
John Wiseman

17

Các ví dụ khác rất tuyệt, tôi chỉ muốn thêm một mẹo nữa:

Đôi khi bạn muốn nhận xét một vài dòng mã, nhưng vẫn bị trình biên dịch biên dịch nó và báo cáo bất kỳ lỗi nào (ví dụ: một tập hợp các lệnh trong không gian tên cấp cao nhất mà bạn định thực hiện sau này tại REPL).

Trong trường hợp này, tôi thích bọc mã có (fn [] .....)nghĩa là nó vẫn được biên dịch, nó chỉ không được gọi.



9

Khi sử dụng emacs và cider, có một lệnh M-x comment-regionmà tôi thường sử dụng.


2

Trong Emacs, bạn có thể sử dụng lệnh M-;(phím tắt cho M-x comment-dwim). Nó sẽ nhận xét hoặc bỏ ghi chú bất kỳ vùng văn bản / mã nào được đánh dấu, vì vậy, miễn là toàn bộ chức năng hoặc bộ chức năng của bạn được bao gồm trong vùng, bạn có thể nhận xét hoặc bỏ ghi chú vùng đó khá dễ dàng. M-;Bạn có thể tìm thấy hướng dẫn sử dụng tham chiếu của Emacs cho hàm tại đây .


2

Có nhiều cách mà tôi biết:

Đầu tiên là sử dụng macro chú thích : nó chỉ không đánh giá tất cả mã bên trong nội dung chú thích (nhưng nó vẫn kiểm tra dấu ngoặc / ngoặc cân bằng). Nếu bạn biết cách của mình với paredit, sẽ không mất nhiều thời gian nếu bạn muốn bình luận một vài cuộc gọi sexp.

(comment 
 (println 1))

Tuy nhiên, nó vẫn sẽ kiểm tra sự khớp trong dấu ngoặc đơn. Vì vậy, nếu bạn có dấu ngoặc đơn không cân bằng, mã của bạn sẽ không biên dịch (mang lạijava.lang.RuntimeException: EOF while reading ).

Một cách khác là sử dụng #_(hay còn gọi là macro loại bỏ): nó sẽ loại bỏ sexp tiếp theo, đó là cách mà cá nhân tôi thích hơn (nhập nhanh hơn và thông thường tôi làm điều đó trên sexps khi phải gỡ lỗi):

#_(println 1)

Nó cũng kiểm tra các dấu phân cách chưa khớp: vì vậy nếu bạn có dấu ngoặc đơn không cân bằng, nó cũng sẽ không biên dịch.

Cuối cùng, có một ;ký tự sẽ bình luận dòng (tương tự như tính năng bình luận các ngôn ngữ khác) và trình biên dịch sẽ bỏ qua nó hoàn toàn. Nếu bạn muốn nhận xét nhiều dòng, bạn cần thêm tất cả các dòng với; , thường là một việc phức tạp, nhưng thông thường các trình soạn thảo văn bản sẽ làm điều đó cho bạn bằng một lệnh sau khi chọn nhiều dòng.

;  (println 1)
;  (println 1 also won't break

0

Đối với một khối bình luận dài, Macro #_ hoặc (bình luận ...) không hoạt động độc quyền, sau đó tôi đã chặn bình luận với VSCODE (OS X).

  1. Đánh dấu khối bình luận.
  2. nhấn lệnh + shift + p trong vscode.
  3. tìm "Thêm nhận xét dòng"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.