如何在Clojure中注释多行代码?
事实上,有一种方法!
(comment
(defn hey []
("嗨!你好!"))
看看我吧!
)
只需用 (comment ..) 把你的注释包装起来即可 :)
玩得开心!
Clojure 支持 #_
读取宏,该宏可完全跳过下一表达式。此功能在有关 Clojure Reader 的页面中提到。还有 comment 宏 具有类似的效果,但实现方式不同。
以上两者都要求您要注释掉的东西是一个语法上正确的 S-表达式。
一些 Lisp 方言具有可以包含任意文本的多行注释,但我没有看到 Clojure 中有这样的注释。
*scratch*
缓冲区中,在多行的;
;;
或者;;;
后面输入一些无关紧要的内容,将光标放在分号后的第一个单词上,然后按下Meta-Q
键)。 - Reb.Cabin#_"
来打开一个多行自由格式的文本注释,并用 "
关闭它。唯一需要注意的是,你需要在其中转义双引号。 - Rachel K. Westmacott#_
。因此,#_#_#_
可以注释掉接下来的三个表单。 - Rachel K. Westmacott双引号(字符串字面量)允许添加任意文本(不仅仅是适当的S形式):
(comment "
public class HelloWorld {
public static void main(String[] args) {
System.out.print("Hello, World");
System.out.println();
}
}
")
其他例子非常好,我只想再添加一个技巧:
有时你想注释掉一些代码行,但是仍然希望编译器编译它并报告任何错误(例如,在顶级命名空间中执行的一组命令,稍后在REPL中执行)。
在这种情况下,我喜欢用(fn[].....)
包装代码,这意味着它仍然会被编译,只是不会被调用。
请查看以下链接:http://en.wikibooks.org/wiki/Clojure_Programming/Tutorials_and_Tips
你可以使用以下语法创建多行注释:
(comment .....
....)
M-x comment-region
。(comment
(println 1))
然而,它仍会检查括号匹配。因此,如果您有不平衡的括号,您的代码将无法编译(导致java.lang.RuntimeException:EOF while reading
)。
另一种方法是使用#_
(即放弃宏):它将丢弃下一个Sexp,这是我个人偏爱的方式(键入更快,通常在调试Sexp时我都会这样做):
#_(println 1)
; (println 1)
; (println 1 also won't break
M-;
(即M-x comment-dwim
的快捷方式)来注释或取消注释任何标记的文本/代码区域,因此只要整个函数或一组功能包含在该区域中,您就可以相当容易地注释或取消注释该区域。有关函数M-;
的Emacs参考手册可以在这里找到。{
:db-connector "jdbc"
#_ #_ :auto-offset-reset {:dev "earliest"
:default "latest"}
}
对于一个较长的注释块,宏 #_ 或 (comment ...) 并不像专有软件那样有效,所以我使用 VSCODE(OS X) 来进行注释块。