¿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?

Respuestas a la pregunta(2)

Su respuesta a la pregunta