在Clojure中阻止评论

unj*_*nj2 117 comments clojure

如何在Clojure中评论多行?

Ray*_*yne 142

实际上,有一种方法!


(comment

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

Check me out! )

只需将你的评论包装在(评论..):)

玩得开心!

  • 一句警告 - (评论)宏扩展为零.使用#_评论单个表单,或#_(评论...)评论多个表单而不插入nil. (18认同)
  • 需要注意的是:似乎内部的任何内容(评论......)都需要成为一种正确的形式; 例如(评论你好:世界)很好但是(评论你好:世界)会产生异常.[编辑:]看起来我应该在发表评论之前阅读格雷格·休吉尔的答案......哦,不管怎样,我会留下它以防万一有人做同样的事情. (14认同)
  • 我以为我想念我的#||#但这样做会更好. (4认同)
  • 我希望你能和Clojure一起玩.:) (4认同)

Gre*_*ill 99

Clojure支持#_读取器宏,它完全跳过下一个表单.有关Clojure Reader的页面上提到了这一点.还有一个注释宏具有类似的效果,但实现方式不同.

以上两者都要求你注释掉的东西在语法上是正确的S表达式.

一些Lisp方言有一个多行注释,可以包含任意文本,但我没有看到一个Clojure.

  • Clojure多行任意文本注释表单不存在.我提交了一个补丁,添加了#| ...... |#comments,但它被拒绝了,因为它不是一个理想的功能.所以它不太可能很快被添加. (19认同)
  • @amalloy:理由是什么?只是不需要,还是有异议? (5认同)
  • 我经常在模仿文学编程风格时写出冗长的评论.我只是使用emacs重新流动多行注释(在`*scratch*`缓冲区中,只需在多行后输入`;`````或`;;;`之后输入一些垃圾,将光标放在第一个单词之后分号,按"Meta-Q"). (2认同)

Iva*_*nko 24

双引号(字符串文字)允许添加任意文本(不仅是正确的S形式):

(comment "

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

")
Run Code Online (Sandbox Code Playgroud)

  • 这只是运气.Ivan的例子解析成4种形式:第一种形式是一个字符串,第二种形式是符号"Hello",第三种形式是符号"World",第四种形式是另一种形式.`comment`只是忽略了所有形式.所以在这个例子中我们很幸运,"Hello,World"解析为合法的clojure.它不适用于任意文本.例如,`(注释"print("/ foo")")`将死于错误"无效的令牌:/ foo". (5认同)
  • 对我有用的好技巧!但是,"Hello World"的引号怎么可能不需要被转义呢? (3认同)

mik*_*era 17

其他例子很棒,我只想再添加一个技巧:

有时您想要注释掉几行代码,但仍然让编译器对其进行编译并报告任何错误(例如,您计划稍后在REPL中执行的顶级命名空间中的一组命令).

在这种情况下,我喜欢包装代码,(fn [] .....)这意味着它仍然被编译,它只是不被调用.


cho*_*ida 15

请看这个链接:http: //en.wikibooks.org/wiki/Clojure_Programming/Tutorials_and_Tips

您可以使用语法创建多行注释

(comment .....
    ....)
Run Code Online (Sandbox Code Playgroud)


cla*_*laj 9

当使用emacs和cider时,M-x comment-region我经常使用一个命令.