gpt4 book ai didi

clojure - core.async >!函数验证它是否从 go block 内部调用

转载 作者:行者123 更新时间:2023-12-01 13:25:16 26 4
gpt4 key购买 nike

在 core.async 中,如果调用 >!在 go block 之外运行,它会抛出错误提示 <! used not in (go ...) block .该函数如何知道它没有在 go block 内执行?我需要创建一些非常相似的东西,我需要确保只能从宏内部调用函数。我该如何处理?我查看了 core.async 源代码,但我无法真正弄清楚它是如何工作的。

最佳答案

这是 <! 的源代码:

(defn <!
"Takes a value from the channel. Must be called inside a (go ...) block. Will
return nil if closed. Will park if nothing is available."
[port]
(assert nil "<! used not in (go ...) block"))

请注意 assert将为任何虚假值抛出异常,因此如果您使用 <!,您会收到此错误消息在 go 之外 block 。

当您使用 go宏,它递归地遍历它包含的所有代码表达式,替换 符号,如 <!使用不调用上面显示的“错误案例”代码的其他代码

关于clojure - core.async >!函数验证它是否从 go block 内部调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48527516/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com