如果您阅读问题宏 - >使用匿名函数,您将看到->
宏与匿名函数不兼容.要正确使用宏,您需要了解实现.从这个意义上说,宏是"漏洞" - API没有完全隐藏实现.
(足够复杂的)Clojure宏是否会泄漏?
[为了比较:C预处理器出现了类似的问题,当粗略地处理宏参数时,可以看到奇怪的副作用.在这种情况下,可以通过将宏参数括在括号中(宏内部)来解决问题.这并没有解决使用具有可变状态的C宏的问题(即每次使用参数都会改变状态),但也许我们可以忽略函数式语言的问题,或者let
用来避免多次评估.
您不需要了解实现 - 文档字符串很清楚它是如何工作的.读者宏也有很好的文档记录 - #(...)将扩展为(fn [...] ...).鉴于这些知识和所提供的信息,很明显,线程匿名函数不起作用.根本不需要理解实现.
从这个意义上讲,Clojure宏不会泄漏.原因 - >使用#()函数意外地工作的是#()是一个读取器宏,读取器宏在"常规"宏之前扩展.所以你需要知道: