从documentation开始,似乎在repl处评估的以下内容应该阻止?
(take 1 (seque (java.util.concurrent.LinkedBlockingQueue.)))
当然我错过了一些明显的东西?
答案 0 :(得分:2)
如果没有传递seque
一个序列来处理它是一个错误(你可以覆盖要使用的队列,但是你仍然必须传递一个序列)。它可以做任何想做的事情,因为你已经通过了无意义的论点。它碰巧返回一个空序列,IMO不是最好的事情:报告错误会更好,但是作为做出的任何实现决策的结果,这就是发生的事情。
编辑:评论者指出LinkedBlockingQueue 是一个序列,因为它是一个j.u.Collection,它是可选的。所以它不是错误的输入,而是seque
的有效(空)序列。 LBQ在被要求查看其内容的顺序视图时,会查看它是否有任何项目;它没有,所以它返回一个空序列。
答案 1 :(得分:0)
查看seque
的{{3}},我了解它的作用是创建一个新的LinkedBlockingQueue
并使用代理开始使用序列s
。使用代理程序,以便将s
中的元素“复制”到创建的LinkedBlockingQueue
异步完成。
文档指出,如果从原始序列到中间BlockingQueue
的异步复制比使用延迟序列seque
的速度慢,则会阻塞。
这根本不是很明显,我会解释你在阅读seque
的文档时所做的一样。我不得不查看消息来源,弄清楚发生了什么。