什么';Clojure中的#的目的是什么?

什么';Clojure中的#的目的是什么?,clojure,Clojure,我正在经历一个他们使用#的过程。通过多次引用,我理解了#is,它告诉读者忽略接下来发生的任何事情 为什么一开始就需要它?如果我们有什么可以忽略的,为什么我们不能删除它或只是评论它?注释过多的#有什么意义?当调试或编写一些修改过的代码时,它非常方便 假设你有一个巨大的功能,你想评论一下。您有几个选择: 您可以使用行注释: ; (defn some-huge-thing [] ; ... Many lines) 但这是痛苦的,除非你的IDE有一个评论快捷方式,即使这样也需要一些工作。另外,我

我正在经历一个他们使用
#
的过程。通过多次引用,我理解了
#
is,它告诉读者忽略接下来发生的任何事情


为什么一开始就需要它?如果我们有什么可以忽略的,为什么我们不能删除它或只是评论它?注释过多的
#
有什么意义?

当调试或编写一些修改过的代码时,它非常方便

假设你有一个巨大的功能,你想评论一下。您有几个选择:

您可以使用行注释:

; (defn some-huge-thing []
;    ... Many lines)
但这是痛苦的,除非你的IDE有一个评论快捷方式,即使这样也需要一些工作。另外,我发现大多数IDE对注释快捷方式的处理都不如理想的效果。有时,他们只是添加另一层注释,而不是删除现有注释。如果您只想注释掉函数的一小部分,行注释也没有帮助,因为它们不区分上下文

您可以使用:

但是我个人不喜欢
注释
,因为在这里,它需要嵌套整个内容,或者仅仅为了添加注释而违反Parinfer。正如@amalloy所指出的,它最终扩展为
nil
,因此它只能在零散的
nil
不会产生任何影响的上下文中使用

。。。或者,您可以使用
#

它根本不需要改变函数。只需输入两次按键,然后删除两次。它也不会计算为
nil
;它被完全忽略了。这意味着您可以使用它,例如,注释掉函数调用中的参数


我个人在处理不同的实现和试图隔离bug时,经常使用
。它会导致在它之后立即出现的任何内容被忽略,因此很容易控制执行和未执行的内容。

(注释…
的更大问题是它扩展为零,而不是完全扩展为零。所以它在一种形式中不起作用。实际上我很少使用它,我忘记了它的局限性。编辑。我几乎总是使用技巧1(行注释,CRTL-/草书),因为
注释
宏和
#
技巧都需要格式良好的表达式(平衡参数等),当我只完成了代码片段的一部分时,我通常没有这种功能。@AlanThompson-FWIW如果你使用像paredit这样的结构编辑,问题就不会那么严重了。我几乎从未有过畸形的表情,即使它还没有完成。不过公平地说,如果你有很好的结构化编辑支持,你可能也有很好的评论多行支持,所以无论什么都有效。是的,我总是使用parinfer。我从来没有不匹配的牙套。我只有在打高尔夫球时才关掉parinfer,因为parinfer在删除空格时会导致奇怪的事情发生。
(comment 
  (defn some-huge-thing []
      ... Many lines))
#_
(defn some-huge-thing []
    ... Many lines)