Bloquear comentários em Clojure

119

Como faço para comentar várias linhas no Clojure?

unj2
fonte

Respostas:

145

Na verdade, existe uma maneira!


(comment

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

Check me out! )

Basta envolver seus comentários em (comentário ..) :)

Diverta-se!

Rayne
fonte
4
Achei que tivesse sentido falta do meu # || # mas assim é melhor.
unj2
4
Espero que você esteja se divertindo com o Clojure. :)
Rayne
14
Uma palavra de cautela: parece que tudo o que está dentro de um (comentário ...) precisa ser uma forma adequada; por exemplo (comentário hello: world) está bem, mas (comment hello: world) produz uma exceção. [Edit:] Parece que eu deveria ter lido a resposta de Greg Hewgill antes de postar este comentário ... bem, vou deixar assim mesmo, caso alguém faça a mesma coisa que eu.
paul
19
Uma palavra de advertência - a macro (comentário) se expande para zero. Use #_ para comentar um único formulário ou #_ (comentário ...) para comentar vários formulários sem inserir um nil.
trate bem seus mods
Ele me lembra desta macro: stackoverflow.com/questions/3732173/…
Felipe
100

Clojure oferece suporte a uma #_macro de leitura que ignora completamente a próxima forma. Isso é mencionado na página sobre o Leitor Clojure . Existe também a macro de comentários que tem um efeito semelhante, mas é implementada de forma diferente.

Ambos os itens acima requerem que o que você está comentando seja uma expressão S sintaticamente correta.

Alguns dialetos Lisp têm um comentário de várias linhas que pode conter texto arbitrário, mas não vejo um para Clojure.

Greg Hewgill
fonte
20
Não existe um formulário de comentário de texto arbitrário de várias linhas do Clojure. Enviei um patch adicionando # | ...... | # comentários, mas foi rejeitado como um recurso não desejado. Portanto, é improvável que seja adicionado tão cedo.
amalloy
5
@amalloy: Qual era o motivo? Simplesmente não necessário ou houve uma objeção?
Ted
2
Costumo escrever longos comentários em uma imitação do estilo de programação letrado. Eu apenas uso o emacs para refazer o fluxo de comentários de várias linhas (no *scratch*buffer, basta digitar algum lixo depois ; ;;ou ;;;em várias linhas, colocar o cursor na primeira palavra após o ponto-e-vírgula e pressionar Meta-Q).
Reb.Cabin
25

Aspas duplas (literal de string) permitem adicionar texto arbitrário (não apenas formas S adequadas):

(comment "

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

")
Ivan Sviatenko
fonte
4
belo truque que funcionou para mim! Mas como é possível que as aspas em "Hello World" não precisem ser escapadas?
maratona de
6
É apenas sorte. O exemplo de Ivan analisa em 4 formas: a primeira forma é uma string, a segunda forma é o símbolo Hello, a 3ª forma é o símbolo Worlde a 4ª forma é outra string. commentapenas ignora todos os formulários. Portanto, no exemplo, temos sorte de Hello, Worldanalisar como um clojure legal. Não funciona com texto arbitrário. Por exemplo, (comment "print("/foo")")vai morrer com o erro Invalid token: /foo.
John Wiseman
17

Outros exemplos são ótimos, gostaria apenas de adicionar mais um truque:

Às vezes, você deseja comentar algumas linhas de código, mas ainda faz com que o compilador o compile e relate quaisquer erros (por exemplo, um conjunto de comandos em um namespace de nível superior que você planeja executar posteriormente no REPL).

Neste caso, gosto de embrulhar o código, o (fn [] .....)que significa que ele ainda é compilado, mas não chamado.

Mikera
fonte
9

Ao usar emacs e cidra, há um comando M-x comment-regionque uso com frequência.

claj
fonte
2

No Emacs você pode usar o comando M-;(o atalho para M-x comment-dwim). Ele comentará ou removerá o comentário de qualquer região marcada de texto / código, portanto, desde que toda a sua função ou conjunto de funções esteja incluído na região, você pode comentar ou remover o comentário dessa região facilmente. O manual de referência do Emacs para a função M-;pode ser encontrado aqui .

MLev
fonte
2

Eu conheço várias maneiras:

O primeiro é usar a macro de comentário : ela apenas não avalia todo o código dentro do corpo do comentário (mas ainda verifica se há parênteses / colchetes equilibrados). Se você conhece o paredito, não vai demorar muito se quiser comentar algumas ligações de sexo oral.

(comment 
 (println 1))

No entanto, ele ainda verificará a correspondência entre parênteses. Então, se você tiver parênteses não balanceados, seu código não compilará (produzindo java.lang.RuntimeException: EOF while reading).

Outra forma é usar #_(também conhecido como macro de descarte): ele descartará o próximo sexp, que é o jeito que eu pessoalmente prefiro (mais rápido para digitar e normalmente faço isso no sexps quando tenho que depurar):

#_(println 1)

Ele também verifica se há delimitadores incompatíveis: portanto, se você tiver parênteses não balanceados, ele não irá compilar também.

Por último, há o ;caractere que comentará a linha (semelhante ao recurso de comentário de outras linguagens) e a compilação o ignorará completamente. Se quiser comentar várias linhas, você precisa preceder todas as linhas com; , que normalmente são um incômodo, mas normalmente os editores de texto farão isso por você com um comando após selecionar várias linhas.

;  (println 1)
;  (println 1 also won't break
Rodrigo Flores
fonte
0

Para um bloco de comentário longo, as macros #_ ou (comentário ...) não funcionaram como proprietárias, então fiz o bloco de comentário com VSCODE (OS X).

  1. Destaque o bloco de comentário.
  2. pressione command + shift + p no vscode.
  3. encontre "Adicionar Comentário de Linha"
madeinQuant
fonte