[英]Why I can't use (if (last acc) acc) inside a loop being acc one of the arguments?
[英]Why can't I reverse an iterator twice to get the last two numbers of a vector?
我想取向量的最后兩個數字。 為什么不能兩次反轉迭代器?
fn main() {
let double_reversed = &vec![1, 2, 3, 4, 5, 6, 7, 8, 9]
.into_iter()
.rev()
.take(2)
.rev()
.collect();
println!("{}", double_reversed); // expected 8, 9
}
錯誤消息是:
error[E0277]: the trait bound `std::iter::Take<std::iter::Rev<std::vec::IntoIter<{integer}>>>: std::iter::DoubleEndedIterator` is not satisfied
--> src/main.rs:6:10
|
6 | .rev()
| ^^^ the trait `std::iter::DoubleEndedIterator` is not implemented for `std::iter::Take<std::iter::Rev<std::vec::IntoIter<{integer}>>>`
error[E0599]: no method named `collect` found for type `std::iter::Rev<std::iter::Take<std::iter::Rev<std::vec::IntoIter<{integer}>>>>` in the current scope
--> src/main.rs:7:10
|
7 | .collect();
| ^^^^^^^
|
= note: the method `collect` exists but the following trait bounds were not satisfied:
`std::iter::Rev<std::iter::Take<std::iter::Rev<std::vec::IntoIter<{integer}>>>> : std::iter::Iterator`
`&mut std::iter::Rev<std::iter::Take<std::iter::Rev<std::vec::IntoIter<{integer}>>>> : std::iter::Iterator`
正如編譯器告訴您的(清理):
特質綁定
Take<...>: DoubleEndedIterator
不滿足
僅在基礎類型實現DoubleEndedIterator
時才實現Iterator::Rev
:
fn rev(self) -> Rev<Self>
where
Self: DoubleEndedIterator,
Take
沒有實現DoubleEndedIterator
,因此無法對其調用rev
。
我會切成薄片:
let items = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let last_2 = &items[items.len() - 2..];
assert_eq!(last_2, [8, 9]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.