Les fonctions divergentes
Bonjour,
Quelqu'un peut-il m'expliquer à quoi ça sert ? Comment ça marche ? Merci Beaucoup.
Car je lis la doc ici :
https://doc.rust-lang.org/book/functions.html
Je comprends que ça dit simplement que la fonction ne retourne pas de valeur, ok.
Je teste l'exemple :
Code:
1 2 3 4 5 6 7
| fn main() {
diverges();
}
fn diverges() -> ! {
panic!("This function never returns!");
} |
Ok, ça roule :-)
Puis je teste autrement, avec :
Code:
1 2 3 4 5 6 7
| fn main() {
diverges();
}
fn diverges() -> ! {
println!("This function never returns!");
} |
Ça plante avec l'erreur :
error: computation may converge in a function marked as diverging [E0270]
Je n'ai pas compris, j'ai bien le point-virgule comme l'instruction ne se retournera pas.
Puis plus bas c'est encore plus bizarre, ça dit que la fonction divergente peut prendre n'importe quels types en retour !!!
L'exemple repris :
Code:
1 2 3 4 5 6 7
| fn main() {
let x:i32 = diverges();
}
fn diverges() -> ! {
panic!("This function never returns!");
} |
Ok ça roule, ça dit juste que la variable n'est pas utilisé avec :
warning: unused variable: `x`, #[warn(unused_variables)] on by default
Mais j'ai toujours pas compris l’intérêt de ce truc !!!
Donc ça sert à quoi !? Merci.