En Rust, la méthode standard pour convertir une chaîne en nombre est la méthode parse(). Elle peut être appliquée aux types qui implémentent le trait FromStr, par exemple, pour convertir String ou &str en i32, f64 et d'autres.
Exemple :
let num: i32 = "42".parse().unwrap();
Cependant, une chaîne incorrecte provoque une erreur (Result::Err). Il est important de gérer le résultat via match pour éviter un crash de l'application :
let input = "abc"; match input.parse::<i32>() { Ok(n) => println!("Nombre : {}", n), Err(e) => println!("Erreur d'analyse : {}", e), }
La méthode parse prend en charge la surcharge de type via "turbofish" (::<i32>), si le type ne peut pas être déduit implicitement.
Question : Peut-on appeler .parse() sans indiquer le type au moment de la compilation et obtenir un résultat correct ?
Réponse fréquente : Oui, si la chaîne contient un nombre.
Réponse correcte : Non, le type dans lequel la conversion est effectuée doit être connu au moment de la compilation. Si le type ne peut pas être déduit (par exemple, n'est pas utilisé explicitement par la suite), le compilateur renverra une erreur.
Exemple de code incorrect :
let x = "10".parse(); // Erreur : on ne sait pas dans quel type analyser
Pour corriger, utilisez turbofish :
let x = "10".parse::<i32>().unwrap();
Histoire
Dans le module d'analyse de la configuration, .parse().unwrap() a été laissé sans gestion d'erreur. Une petite erreur dans la configuration utilisateur a provoqué un panic ! et a arrêté toute l'application en production.
Histoire
Dans un projet, les développeurs n'indiquaient pas le type explicitement (n'utilisaient pas turbofish), et la variable intermédiaire n'était pas utilisée, donc le compilateur ne pouvait pas déduire le type, ce qui a entraîné une erreur difficile à détecter au moment de la compilation.
Histoire
Un bug est survenu dans un projet car pour analyser un grand nombre à partir d'une chaîne, on a accidentellement appliqué parse::<u8>, ce qui a conduit à une erreur de dépassement. L'erreur n'a été détectée que plusieurs semaines après utilisation, lorsque des données ont été perdues.