Tenho um código semelhante a este, que não compilaria com Rust v < 1.83.0
fn main() {
let result: Result<(), String> = Err("Something went wrong".to_string());
let status = match result {
Ok(()) => "✅", // Success
Err(err) => &format!("❌ {:?}", err), // Failure (this line causes an error)
};
println!("{}", status);
}
Erro:
error[E0716]: temporary value dropped while borrowed
--> tests/integration_tests.rs:143:26
|
141 | let status = match result.result {
| ------ borrow later stored here
142 | Ok(()) => "✅", // Success
143 | Err(err) => &format!("❌ {:?}", err), // Failure
| ^^^^^^^^^^^^^^^^^^^^^^-
| | |
| | temporary value is freed at the end of this statement
| creates a temporary value which is freed while still in use
Após a atualização para o Rust 1.83.0, este código agora compila corretamente.
Dei uma olhada nos últimos changelogs do Rust em busca de uma explicação, mas não consegui encontrar nada que parecesse relevante.
Não tenho certeza de qual versão do Rust a mensagem de erro vem, exceto que é inferior a 1.83.0
Alguém pode apontar a mudança na linguagem Rust que permite a compilação deste código?
(O que aconteceu é que eu tinha esse código em outra máquina onde estava funcionando bem. Enviei-o para outra máquina com uma versão anterior do Rust. Quando tentei compilar, recebi o erro acima. Eu o "consertei" atualizando o Rust para a versão estável mais recente.)