¿Por qué una referencia anidada a una matriz no obliga a un segmento?

Yo leo¿Cuáles son las reglas exactas de auto-referencia de Rust? de principio a fin, pero todavía tengo una pregunta sobre la coerción de la matriz a la división.

Pensemos en el siguiente código:

let arr: &[i32; 5] = &&&[1, 2, 3, 4, 5];
// let arr: &[i32] = &&&[1, 2, 3, 4, 5]; // Error; expected slice, found reference

Yo esperaría que&&&[1, 2, 3, 4, 5] tiene el tipo&&&[i32; 5] y desreferencias a&&[i32; 5] =>&[i32; 5] =>&[i32; 5] =>&[i32], pero el resultado es diferente de lo que esperaba.

Traté de ejecutar el siguiente código:

let arr: &&&[i32; 5] = &&&[1, 2, 3, 4, 5];
let n = arr.first().unwrap(); // 1

Ese es el código correcto. El tipo dearr está obligado a&&&[i32; 5] =>&&[i32; 5] =>&[i32; 5] =>&[i32] y coincide con el primer argumento defirst en rodaja&self.

¿Cuál es la condición que las matrices obligan a cortar? No entiendo la diferencia entre el código anterior y el último.

También reviséla documentación en el código fuente, y supongo que la pregunta anterior tiene algo que ver con la oración citada a continuación;

Sin embargo, a veces hacemos otros ajustes y coacciones a lo largo del camino, en particular el cambio de tamaño (por ejemplo, la conversión de [T; n] a [T]).

Respuestas a la pregunta(1)

Su respuesta a la pregunta