Trait core::stream::Stream [−][src]
pub trait Stream {
type Item;
fn poll_next(
self: Pin<&mut Self>,
cx: &mut Context<'_>
) -> Poll<Option<Self::Item>>;
fn size_hint(&self) -> (usize, Option<usize>) { ... }
}Associated Types
Required methods
尝试拉出该流的下一个值,如果该值尚不可用,则注册当前任务以进行唤醒,如果流已用尽,则返回 None。
返回值
有几个可能的返回值,每个返回值指示不同的流状态:
-
Poll::Pending意味着这个流的下一个值还没有准备好。实现将确保在准备好下一个值时将通知当前任务。 -
Poll::Ready(Some(val))表示流已成功生成值val,并且可能会在后续poll_next调用中生成更多值。 -
Poll::Ready(None)表示流已终止,不应再次调用poll_next。
Panics
流完成后 (从 poll_next 返回 Ready(None)),再次调用其 poll_next 方法可能会 panic,永远阻塞或引起其他类型的问题。Stream trait 对这种调用的效果没有任何要求。
但是,由于 poll_next 方法未标记为 unsafe,因此适用 Rust 的通常规则:调用决不能引起未定义的行为 (内存损坏,对 unsafe 函数的错误使用等),而与流的状态无关。
Provided methods
返回流剩余长度上的边界。
具体来说,size_hint() 返回一个元组,其中第一个元素是下界,第二个元素是上界。
返回的元组的后半部分是 Option<usize>。
这里的 None 表示没有已知的上限,或者该上限大于 usize。
实现说明
流实现不会产生声明数量的元素,这不是强制性的。buggy 流产生的值可能小于元素的下限,也可能大于元素的上限。
size_hint() 主要用于优化,例如为流的元素保留空间,但不能被信任,例如省略不安全代码中的边界检查。
size_hint() 的不正确实现不应导致违反内存安全性。
也就是说,该实现应提供正确的估计,因为否则将违反 trait 的协议。
默认实现返回了 (0, None),这对于任何流都是正确的。