Каково точное определение цикла for в Rust?
Я пришел из C (и в меньшей степени, C ++) фона. Я написал следующий фрагмент кода:
fn main() {
let my_array = [1, 2, 3];
let print_me = |j| println!("= {}", j);
for k in my_array.iter() {
print_me(k);
}
}
Это скомпилировано и работает, как и ожидалось, но затем я указал тип аргумента, передаваемого закрытиюprint_me
таким образом:
fn main() {
let my_array = [1, 2, 3];
let print_me = |j: i32| println!("= {}", j);
for k in my_array.iter() {
print_me(k);
}
}
Я получил ошибку компиляции:
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}`
Теперь это смущало меня, пока я не изменилсяk
в&k
вfor
Заявление, которое работало нормально:
fn main() {
let my_array = [1, 2, 3];
let print_me = |j: i32| println!("= {}", j);
for &k in my_array.iter() {
print_me(k);
}
}
Кажется, я неправильно понялfor
сам синтаксис - или, возможно, точная работа итератора - или, возможно, синтаксис использования ссылки по отношению к указателю [которые связаны, но различны в C ++].
В конструкцииfor A in B { C1; C2; ... Cn }
что именноA
а такжеB
должно быть?