2 minutes
Tips en vrac sur Rust
Voir les “choses” chargées par défaut lors du démarrage d’un programme Rust
“The prelude is the list of things that Rust automatically imports into every Rust program.” Source
https://doc.rust-lang.org/std/prelude/v1/index.html
Some()
Some
est une variante de l’enum Option.
enum Option<T> {
None,
Some(T),
}
Si on veut parler d’une variable qui existe, on utilise Some(value)
. (Par contre, si on veut parler d’une variable qui pourrait ne pas exister, on utilise plutôt Option<IciAnyType>
)
Il peut être intéressant d’utiliser l’opérateur
if let
avecSome()
:if let Some(s) = ma_fonction(1) {... ...
Utilisation du Some()
dans un while let
C’est un shortcut à loop:
let mut vecteur = vec!("titi", "tata", "toto");
loop {
match vecteur.pop() {
Some(x) => println!("{}", x),
None => break,
}
}
A noter ici que
vecteur
doit être défini comme mutable; sans quoivecteur.pop()
poserait problème. Le compilateur empêchera la compilation de toute façon…
let mut vecteur = vec!("titi", "tata", "toto");
while let Some(x) = vecteur.pop() {
println!("{}", x);
}
Output:
toto
tata
titi
Debugging: afficher le type d’une variable
fn debug_print_type_of<T>(_: &T) {
println!("{}", std::any::type_name::<T>())
}
fn main() {
let test_string = "titi";
let test_i32 = 42;
debug_print_type_of(&test_string); // &str
debug_print_type_of(&test_i32); // i32
}
Return ou pas return?
Le code suivant:
fn sum(num1: i32, num2: i32) -> i32 {
num1 + num2
}
est équivalent au code suivant:
fn sum(num1: i32, num2: i32) -> i32 {
return num1 + num2;
}
Préciser qu’une fonction ne retourne rien
Comment faire l’équivant de -> None:
en Python mais en Rust ?
fn ma_fonction() -> () {
println!("Hello world");
}
L’opérateur ?
L’utilisation de l’opérateur ?
n’est possible que sur les types qui implémentent le trait Try.
use std::fs::File;
fn open_file(filename: &str) -> Result<u32, String> {
let mut my_file = File::open(filename).map_err(|e| format!("Error while opening file {:?}", (filename, e)))?;
Ok(0)
}
Noter ici l’utilisation du paramètre
{:?}
dans la macroformat
. Plus d’information sur les paramètres disponibles pour formater des strings sur la doc officielle.