Qual é a definição exata do loop for no Rust?
Estou vindo de um plano de fundo em C (e, em menor grau, em C ++). Eu escrevi o seguinte trecho 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);
}
}
Isso foi compilado e executado conforme o esperado, mas especifiquei o tipo de argumento passado para o fechamentoprint_me
portanto:
fn main() {
let my_array = [1, 2, 3];
let print_me = |j: i32| println!("= {}", j);
for k in my_array.iter() {
print_me(k);
}
}
Eu recebi um erro de compilação:
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}`
Agora isso me confundiu até que eu mudeik
para&k
nofor
declaração, que funcionou bem:
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 eu não entendi ofor
própria sintaxe - ou talvez o funcionamento exato de um iterador - ou talvez a sintaxe de uso de uma referência em relação a um ponteiro [que são relacionados mas distintos em C ++].
Na construçãofor A in B { C1; C2; ... Cn }
, o que exatamente sãoA
eB
deveria ser?