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.
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.
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();
}
}
")
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.
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 .
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.
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).
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.
fonte
*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 pressionarMeta-Q
).Aspas duplas (literal de string) permitem adicionar texto arbitrário (não apenas formas S adequadas):
fonte
Hello
, a 3ª forma é o símboloWorld
e a 4ª forma é outra string.comment
apenas ignora todos os formulários. Portanto, no exemplo, temos sorte deHello, World
analisar como um clojure legal. Não funciona com texto arbitrário. Por exemplo,(comment "print("/foo")")
vai morrer com o erroInvalid token: /foo
.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.fonte
Veja este link: http://en.wikibooks.org/wiki/Clojure_Programming/Tutorials_and_Tips
Você pode criar comentários de várias linhas com a sintaxe
fonte
Ao usar emacs e cidra, há um comando
M-x comment-region
que uso com frequência.fonte
No Emacs você pode usar o comando
M-;
(o atalho paraM-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çãoM-;
pode ser encontrado aqui .fonte
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.
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):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.fonte
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).
fonte