¿Cuál es la definición exacta del ciclo for en Rust?
Vengo de un fondo C (y en menor medida, C ++). Escribí el siguiente fragmento de código:
fn main() {
let my_array = [1, 2, 3];
let print_me = |j| println!("= {}", j);
for k in my_array.iter() {
print_me(k);
}
}
Esto se compiló y ejecutó como se esperaba, pero luego especifiqué el tipo de argumento pasado al cierreprint_me
así:
fn main() {
let my_array = [1, 2, 3];
let print_me = |j: i32| println!("= {}", j);
for k in my_array.iter() {
print_me(k);
}
}
Tengo un error de compilación:
error[E0308]: mismatched types
--> src/main.rs:6:22
|
6 | print_me(k);
| ^
| |
| expected i32, found &{integer}
| help: consider dereferencing the borrow: `*k`
|
= note: expected type `i32`
found type `&{integer}`
Ahora esto me confundió hasta que cambiék
a&k
en elfor
declaración, que funcionó bien:
fn main() {
let my_array = [1, 2, 3];
let print_me = |j: i32| println!("= {}", j);
for &k in my_array.iter() {
print_me(k);
}
}
Parece que entendí mal elfor
sintaxis en sí, o tal vez el funcionamiento exacto de un iterador, o tal vez la sintaxis de uso de una referencia frente a un puntero [que están relacionados pero son distintos en C ++].
En la construcciónfor A in B { C1; C2; ... Cn }
, que son exactamenteA
yB
¿se supone que es?