Clojure中#_的目的是什么?

时间:2019-08-18 18:11:08

标签: clojure

我正在经历library code,他们使用#_。通过多次引用,我知道#_discard symbol,它告诉读者忽略接下来的内容。

为什么首先需要它?如果我们有一些要忽略的东西,为什么我们不能删除它或只发表评论呢? #_超过评论的意义是什么?

1 个答案:

答案 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;它只是被忽略。这意味着您可以使用它来例如在函数调用中注释掉参数。

在尝试不同的实现以及试图隔离错误时,我经常使用#_。它会导致所有在其后立即出现的事件都被忽略,因此很容易控制正在执行或未执行的内容。

相关问题