Elegant/Best 从迭代中获取最后一个元素的解决方案

Elegant/Best solution to get the last element from an iteration

我正在通过一个频道接收多条消息,在迭代它们之后,我想保留最后一个元素以供进一步使用。我的第一个(可能是坏的!)方法是声明一些变量,然后在每个循环中给它赋值。

let last = 0;
for some in rx_from_channel.iter() {
   let last = some;
}

let a = last + 5;

我真的不喜欢这个解决方案 - 是否可以避免在每个循环中分配 last? 此外,我预计在 for {} 循环中首次使用 let last 之后,在循环上方声明的变量超出范围 - 并且 ļast 之后不可用for {} 循环。编译器另有建议 - 为什么?

方法 last() 不能解决您的问题吗?

你可以这样做:

let last = rx_from_channel.iter().last().unwrap_or_else(|| &0);
let a = last + 5;

last()

fn last(self) -> Option<Self::Item>
Consumes the iterator, returning the last element.