Was ist die genaue Definition der for-Schleife in Rust?
Ich komme aus C (und in geringerem Maße aus C ++). Ich habe den folgenden Codeausschnitt geschrieben:
fn main() {
let my_array = [1, 2, 3];
let print_me = |j| println!("= {}", j);
for k in my_array.iter() {
print_me(k);
}
}
Dies wurde wie erwartet kompiliert und ausgeführt, aber dann habe ich den Typ des Arguments angegeben, das an den Closure übergeben wird.print_me
also:
fn main() {
let my_array = [1, 2, 3];
let print_me = |j: i32| println!("= {}", j);
for k in my_array.iter() {
print_me(k);
}
}
Ich habe einen Kompilierungsfehler:
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}`
Now das verwirrte mich, bis ich @ änderk
zu&k
in demfor
Anweisung, die gut funktioniert hat:
fn main() {
let my_array = [1, 2, 3];
let print_me = |j: i32| println!("= {}", j);
for &k in my_array.iter() {
print_me(k);
}
}
Es scheint, dass ich das @ falsch verstanden hafor
-Syntax selbst - oder vielleicht die genaue Funktionsweise eines Iterators - oder vielleicht die Verwendungssyntax einer Referenz gegenüber einem Zeiger [die verwandt, aber in C ++ unterschiedlich sind].
Im Konstruktfor A in B { C1; C2; ... Cn }
, was genau sindA
undB
soll sein?