欢迎!有关此如何运作的更多信息,请参阅关于页面。
从用户的角度来看,<! 和 >! 不是一个函数,因为它们不能在 go 块内部用作函数;例如 (go (apply <! ...)) 不是一个有效的形式。这是一个问题,因为它会1)使用户产生混淆,2)导致其他宏(例如 CLJ-2291)出现错误。
(go (apply <! ...))
建议的解决方案:使<! 和 >! 成为宏。
向后兼容性:这种更改不应引入任何破坏性更改,因为 <! 无法作为函数使用。此更改将引入 <!! 和 <! 之间的不匹配,其中一个是一个函数,另一个不是,但这种不匹配与这两个术语之间的语义差异相一致。
可能地,它也会将 ">! 未在 (go ...) 块中使用的"错误移到编译时间,从而干净地解决了之前报告的一些问题,例如:(链接:https://dev.clojure.org/jira/browse/ASYNC-168?focusedCommentId=42881&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-42881 文字:ASYNC-168)