Clojure에서 주석 차단


119

Clojure에서 여러 줄을 어떻게 주석 처리합니까?

답변:


145

사실 방법이 있습니다!


(comment

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

Check me out! )

의견을 (comment ..) :)

즐기세요!


4
나는 이드가 내 # || #을 그리워한다고 생각했지만이게 훨씬 낫다.
unj2

4
Clojure와 함께 즐거운 시간을 보내시기 바랍니다. :)
Rayne 2009-07-28

14
주의 사항 : (코멘트 ...) 안에있는 모든 것이 적절한 형식이어야하는 것 같습니다. 예를 들어 (hello : world 주석) 괜찮지 만 (hello : world 주석) 예외가 발생합니다. [편집 :]이 댓글을 게시하기 전에 Greg Hewgill의 답변을 읽어야했던 것 같습니다 ... 오 글쎄, 누군가 내가했던 것과 같은 일을 할 경우를 대비해 남겨 둘 게요.
paul

19
경고 한마디-(주석) 매크로가 nil로 확장됩니다. 단일 양식에 주석을 달려면 #_을 사용하고 nil을 삽입하지 않고 여러 양식에 주석을 달려면 #_ (comment ...)를 사용하십시오.
당신의 개조를 치료

: 그것은 나에게이 매크로 기억 stackoverflow.com/questions/3732173/...을
펠리페

100

Clojure는 #_다음 양식을 완전히 건너 뛰는 판독기 매크로를 지원합니다 . 이것은 Clojure Reader 에 관한 페이지에 언급되어 있습니다. 비슷한 효과가 있지만 다르게 구현되는 주석 매크로 도 있습니다 .

위의 두 가지 모두 주석 처리중인 것이 그렇지 않으면 구문 상 올바른 S- 표현식이어야합니다.

일부 Lisp 방언에는 임의의 텍스트를 포함 할 수있는 여러 줄 주석이 있지만 Clojure에 대해서는 표시되지 않습니다.


20
Clojure 다중 행 임의 텍스트 주석 양식이 없습니다. # | ...... | # 주석을 추가하여 패치를 제출했지만 원하는 기능이 아닌 것으로 거부되었습니다. 따라서 곧 추가 될 가능성은 거의 없습니다.
amalloy 2011

5
@amalloy : 근거는 무엇 이었습니까? 필요하지 않았거나 이의가 있었습니까?
Ted

2
나는 종종 문학적 프로그래밍 스타일을 모방하여 긴 주석을 씁니다. 저는 emacs를 사용 하여 여러 줄 주석을 리플 로우합니다 ( *scratch*버퍼에서 정크 를 여러 줄 뒤 ; ;;또는 ;;;여러 줄에 입력하고 세미콜론 뒤의 첫 번째 단어에 커서를 놓고를 누릅니다 Meta-Q).
Reb.Cabin 2013 년

25

큰 따옴표 (문자열 리터럴)를 사용하면 임의의 텍스트를 추가 할 수 있습니다 (적절한 S 형식뿐 아니라).

(comment "

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

")

4
나를 위해 일한 멋진 트릭! 그러나 "Hello World"의 따옴표를 이스케이프 할 필요가없는 이유는 무엇입니까?
마라톤

6
그냥 행운입니다. Ivan의 예제는 4 가지 형식으로 구문 분석됩니다. 첫 번째 형식은 문자열, 두 번째 형식은 symbol Hello, 세 번째 형식은 symbol World, 네 번째 형식은 다른 문자열입니다. comment모든 양식을 무시합니다. 따라서 예제에서 우리는 Hello, World합법적 인 클로저로 구문 분석 하는 것이 운이 좋습니다 . 임의의 텍스트에서는 작동하지 않습니다. 예를 들어 (comment "print("/foo")")는 오류로 죽습니다 Invalid token: /foo.
John Wiseman

17

다른 예는 훌륭합니다. 한 가지 트릭을 더 추가하고 싶습니다.

때로는 몇 줄의 코드를 주석 처리하고 싶지만 컴파일러가이를 컴파일하고 오류를보고하도록합니다 (예 : 나중에 REPL에서 실행할 계획 인 최상위 네임 스페이스의 명령 집합).

이 경우 코드를 래핑하는 것을 좋아합니다. (fn [] .....)즉, 여전히 컴파일되고 호출되지 않습니다.



9

emacs와 cider를 M-x comment-region사용할 때 자주 사용 하는 명령 이 있습니다.


2

Emacs에서 명령 M-;(단축키)을 사용할 수 있습니다 M-x comment-dwim. 텍스트 / 코드의 표시된 영역에 주석을 달거나 주석을 제거하므로 전체 함수 또는 함수 집합이 해당 영역에 포함되어있는 한 해당 영역에 주석을 추가하거나 주석을 제거 할 수 있습니다. 이 기능에 대한 Emacs 참조 설명서는 여기M-; 에서 찾을 수 있습니다 .


2

내가 아는 여러 가지 방법이 있습니다.

첫 번째는 주석 매크로를 사용하는 것입니다 . 주석 본문 내의 모든 코드를 평가 하지는 않지만 균형 잡힌 괄호 / 대괄호를 확인합니다. paredit를 사용하는 방법을 알고 있다면 몇 번의 sexp 호출에 대해 의견을 말하고 싶다면 시간이 많이 걸리지 않을 것입니다.

(comment 
 (println 1))

그러나 여전히 괄호 일치를 확인합니다. 따라서 불균형 괄호가 있으면 코드가 컴파일되지 않습니다.java.lang.RuntimeException: EOF while reading ).

또 다른 방법은 #_(일명 폐기 매크로)를 사용하는 것입니다. 이것은 제가 개인적으로 선호하는 방식 인 다음 sexp를 폐기 할 것입니다 (입력하는 것이 더 빠르며 일반적으로 디버그해야 할 때 sexps에서 수행합니다).

#_(println 1)

또한 일치하지 않는 구분 기호를 확인하므로 균형이 맞지 않는 괄호가 있으면 컴파일되지 않습니다.

마지막으로 ;줄을 주석 처리 하는 문자 (다른 언어 주석 기능과 유사)가 있으며 컴파일은이를 완전히 무시합니다. 여러 줄을 주석 처리하려면 모든 줄 앞에;를 추가해야합니다. , 이는 일반적으로 번거롭지 만 일반적으로 텍스트 편집기는 여러 줄을 선택한 후 명령을 사용하여 자동으로 수행합니다.

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

0

긴 주석 블록의 경우 매크로 #_ 또는 (주석 ...)이 제대로 작동하지 않았고 VSCODE (OS X)로 주석 블록을 수행했습니다.

  1. 주석 블록을 강조 표시하십시오.
  2. vscode에서 command + shift + p를 누릅니다.
  3. "줄 설명 추가"찾기
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.