如何在 Clojure 中注释多行?
其实还有办法!
(comment
(defn hey []
("Hey there!"))
Check me out!
)
只需将您的评论放入(评论..):)
玩得开心!
Clojure 支持
#_
阅读器宏,它完全跳过下一个表单。关于 Clojure Reader 的页面提到了这一点。还有 comment 宏,它具有类似的效果,但实现方式不同。
上述两项都要求您注释掉的内容是语法上正确的 S 表达式。
某些 Lisp 方言具有可以包含任意文本的多行注释,但我没有看到 Clojure 的多行注释。
双引号(字符串文字)允许添加任意文本(不仅是正确的 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 .....
....)
使用 emacs 和 cider 时,有一个我经常使用的命令
M-x comment-region
。
我知道有多种方法:
第一个是使用 comment 宏:它只不评估注释体内的所有代码(但它仍然检查平衡的括号/方括号)。如果您了解 paredit 的使用方法,那么如果您想评论一些 sexp 调用,也不会花费太多时间。
(comment
(println 1))
但是,它仍然会检查括号匹配。因此,如果您的括号不平衡,您的代码将无法编译(产生
java.lang.RuntimeException: EOF while reading
)。
另一种方法是使用
#_
(又名丢弃宏):它将丢弃下一个 sexp,这是我个人更喜欢的方式(打字速度更快,通常当我必须调试时我在 sexp 上这样做):
#_(println 1)
它还会检查不匹配的分隔符:所以如果你有不平衡的括号,它也不会编译。
最后,有一个
;
字符将注释该行(类似于其他语言的注释功能),编译将完全忽略它。如果要注释多行,则需要在所有行前面加上 ; ,这通常很麻烦,但通常文本编辑器会在选择多行后使用命令为您完成此操作。
; (println 1)
; (println 1 also won't break
在 Emacs 中,您可以使用命令
M-;
(M-x comment-dwim
的快捷方式)。 它将注释或取消注释文本/代码的任何标记区域,因此,只要您的整个函数或函数集包含在该区域中,您就可以非常轻松地注释或取消注释该区域。 函数 M-;
的 Emacs 参考手册可以在 here 找到。
对于长注释块,宏 #_ 或 (comment ...) 无法正常工作,然后我使用 VSCODE(OS X) 进行了注释块。
Clojure 还支持双 #_ #_ reader 宏,它完全跳过接下来的两种形式。 对于注释地图中的键和多行值非常有用。
示例
{
:db-connector "jdbc"
#_ #_ :auto-offset-reset {:dev "earliest"
:default "latest"}
}
这个博客确实非常出色,以彻底而周到的方式提供了重要信息。我非常钦佩作者为创造如此有价值的内容所付出的努力。感谢您与我们分享这些富有洞察力和实用的信息。为了获得更丰富的体验并获得进一步的见解,我强烈建议访问我们的网站。继续出色的工作——我期待将来看到您更多精心制作的帖子。非常感谢您对提供优质资源的承诺! 赖布尔伴游