为什么迭代器变量需要可变
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
会更改此内部状态,这意味着迭代器必须静音。
我是 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
会更改此内部状态,这意味着迭代器必须静音。