你有太多太多的 go
块,不仅从代码中的数量来判断,而且从执行的数量来判断。循环中的第一个 go
块没有阻塞——它允许立即继续执行。无法保证在同一块再次执行时,前一个块已有足够的时间将值放入通道中。这是一个竞态条件。
为了确认,只需运行此代码:(set (repeatedly 10000 mojorate))
。如果只得到一个元素的集合,则增加该数字。
代码段向通道发送10个数,并返回它们的一半。
句子的第一部分是函数用户角度的细节实现,与问题无关。如果您只需要从1开始的一半的10个数向量,那么当然是(mapv #(/ % 2) (range 1 11))
如果您还需要其他内容,请详细描述,这样我们就不会陷入XY问题。原始函数可以被重写为多种方式——如果您的实际问题需要特定的东西,则其中任何一个都可能不正确。