Clojure中#_和;有什么区别?

3

我知道在Clojure中,我们使用分号 (;) 进行注释,这相当于Java中的双斜杠 (//)。但我不理解为什么还需要使用 #_。

有人可以解释一下吗?它是用来忽略文本的吗?如果是这样的话,它与 ; 有什么不同?

1个回答

8

;是一种行注释;它忽略从;到该行末尾的文本。这也意味着,有时在最后一行加注释会导致只有闭合括号的行,通常应避免这种情况。主要用途是为人类编写注释。

#_被称为discard;它忽略下一个表达式,这意味着它不受源文件中换行符的影响。这主要用于快速“切换”代码。您还可以堆叠#_。例如:{#_#_ :a 42}

请注意,还有一个(comment ...)宏,它会丢弃主体并返回nil;因此,主体必须是“有效的”,建议您不要在可能导致混乱的情况下使用它。这主要用于在源代码或REPL中提供一些“概念证明”,但不应作为ns的一部分运行,或者当您懒得编写适当的测试时运行。

讲解得非常好!发现这真的很有帮助。 - MouseNag
你能想到一个例子,使(comment ...)失败,但#_...可以通过吗? - Thumbnail
@缩略图 (+ (comment 1) 2 3) vs (+ #_ 1 2 3)。经验法则:只在ns的顶层使用注释。 - cfrick
(注释..)表单有时被称为丰富的注释表单(RCF),因为a)Rich Hickey经常使用它们进行探索性代码,显示用法或完成代码的构建方式b)Stu Halloway创造了这个术语c)它们“丰富”在于它们是真正的代码,编辑器通常特殊处理其中的表单,就好像它们是顶级的一样(Calva允许您在comment中评估顶级表单内的表达式)。我在开发代码时经常使用RCFs。 - Sean Corfield

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接