从文档中,似乎在 repl 处评估的以下内容应该阻止?
(take 1 (seque (java.util.concurrent.LinkedBlockingQueue.)))
当然我错过了一些明显的东西?
不传递要使用的序列是错误seque
的(您可以覆盖要使用的队列,但仍然必须传递序列)。它可以做它想做的任何事情,因为你已经传递了无意义的参数。它碰巧返回一个空序列,这不是 IMO 最好的做法:最好报告一个错误,但由于做出了任何实施决策,这就是发生的事情。
编辑:评论者指出LinkedBlockingQueue是一个序列,因为它是一个可序列化的 juCollection。所以这不是完全错误的输入,而是从seque
. LBQ 在被要求对其内容进行顺序视图时,会查看它是否有任何项目;它没有,所以它返回一个空序列。
查看 的源代码,seque
我理解它的作用是创建一个新的并开始使用代理使用LinkedBlockingQueue
序列。使用代理以便异步完成从创建元素到创建s
元素的“复制” 。s
LinkedBlockingQueue
文档表明,如果从原始序列到中间序列的异步复制BlockingQueue
比您使用延迟序列返回的速度慢seque
,它将阻塞。
这一点都不明显,我的解释与您阅读seque
. 我必须查看源头才能弄清楚发生了什么。