为什么迭代器变量需要可变

Why does an iterator variable need to be mutable

我是 Rust 场景的新手。仍在学习所有权、借用、生命周期等的来龙去脉。我的整个职业生涯都在使用 NodeJS。

use battery::Manager;
use spin_sleep::sleep;
use std::time::Duration;
fn main() {
    loop {
        if let Ok(manager) = Manager::new() {
            if let Ok(batteries) = manager.batteries() {
//                    ^^^^^^^^^ - This variable
//Rust analyzer tells me to make it mutable and it is fixed when I do so
                if let Some(Ok(battery)) = batteries.next() {
                    println!("Vendor: {:?}", battery.vendor());
                    println!("Model: {:?}", battery.model());
                    println!("State: {:?}", battery.state());
                    println!("Charge: {:?}", battery.state_of_charge());
                    println!("Time to full charge: {:?}", battery.time_to_full());
                    println!("");
                }
            }
        }
        sleep(Duration::from_secs(180));
    }
}

每次调用 batteries.next() 时,您都会得到不同的值(或 None 完成时)。

这是因为迭代器具有内部状态,例如可以是引用集合中的索引。

调用 next 会更改此内部状态,这意味着迭代器必须静音。