Por que uma referência aninhada a uma matriz não impõe uma fatia?

Eu liQuais são as regras exatas de desreferenciação automática da Rust? do começo ao fim, mas ainda tenho uma dúvida sobre a coerção de matriz para fatia.

Vamos pensar no seguinte código:

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

Eu esperaria isso&&&[1, 2, 3, 4, 5] tem o tipo&&&[i32; 5] e desreferências para&&[i32; 5] =>&[i32; 5] =>&[i32; 5] =>&[i32], mas o resultado é diferente do que eu esperava.

Eu tentei executar o seguinte código:

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

Esse é o código correto. O tipo dearr é coagido a&&&[i32; 5] =>&&[i32; 5] =>&[i32; 5] =>&[i32] e corresponde ao primeiro argumento defirst em fatia,&self.

Qual é a condição que as matrizes coagem às fatias? Não entendo a diferença entre o código anterior e o último.

Eu também verifiqueia documentação no código fonte, e suponha que a pergunta acima tenha algo a ver com a frase citada abaixo;

No entanto, às vezes fazemos outros ajustes e coerções ao longo do caminho, em especial redimensionando (por exemplo, convertendo de [T; n] para [T]). `

questionAnswers(1)

yourAnswerToTheQuestion