我正在经历library code,他们使用#_
。通过多次引用,我知道#_
是discard symbol,它告诉读者忽略接下来的内容。
为什么首先需要它?如果我们有一些要忽略的东西,为什么我们不能删除它或只发表评论呢? #_
超过评论的意义是什么?
答案 0 :(得分:5)
在调试或编写一些更改的代码时非常方便。假设您有一些强大的功能,并且想要对其进行注释。您有几种选择:
您可以使用行注释:
; (defn some-huge-thing []
; ... Many lines)
但是,除非您的IDE拥有注释快捷方式,否则这会很痛苦,即使这样它也需要一些工作。另外,我发现大多数IDE对注释快捷方式的处理效果都不理想。有时,他们只是添加注释的另一个“层”,而不是删除现有的注释。如果只想注释掉函数的一小部分,则行注释也无济于事,因为它们不是上下文相关的。
您可以使用comment:
(comment
(defn some-huge-thing []
... Many lines))
但是我个人不喜欢comment
,因为在这里,它需要嵌套整个内容,或者违反Parinfer来添加评论。同样,正如@amalloy指出的那样,它最终会扩展为nil
,因此只能在杂散nil
不会产生任何影响的情况下使用。
...或者,您可以使用#_
:
#_
(defn some-huge-thing []
... Many lines)
根本不需要更改功能。只需敲两次键,就可以消除两次键。它也不等于nil
;它只是被忽略。这意味着您可以使用它来例如在函数调用中注释掉参数。
在尝试不同的实现以及试图隔离错误时,我经常使用#_
。它会导致所有在其后立即出现的事件都被忽略,因此很容易控制正在执行或未执行的内容。