我刚接触Rust,所以这可能是一个天真的问题,但我在研究TrustedLen特性时感到困惑。它描述了一个TrustedLen迭代器“报告一个大小提示,其中它要么是精确的(下限等于上限),要么是上限为None。”我对我们从另一个没有实现TrustedLen的迭代器创建TrustedLen迭代器的情况很好奇。
pub fn main() -> () {
let v = vec![1, 2, 3, 4, 5];
let (lower, upper) = v.iter().filter(|num| {*num % 2 == 0}).take(2).size_hint();
println!("({},{})", lower, upper.unwrap());
}
这将生成以下消息
(0,2)
这里的下限与上限不匹配,因为过滤器 predicate ,但是我在实现TrustedLen的Take迭代器上调用size_hint。
1条答案
按热度按时间ygya80vv1#
Take
只有在内部迭代器为TrustedLen
时才有条件地实现TrustedLen
。在这种情况下,Filter
不是,因此迭代器不是TrustedLen
:Yields: