Lifetimes
Ces exercices portent sur les annotations de durée de vie, les fonctions qui renvoient une référence, l'élision et le pattern NewType. Le chapitre est vu en survol : exercices courts.
Le plus long
Renvoyer la plus longue de deux chaînes empruntées. Ici, il faut annoter la durée de vie.
- Objectif :
fn f<'a>(a: &'a str, b: &'a str) -> &'a str. - Signature suggérée :
fn plus_long<'a>(a: &'a str, b: &'a str) -> &'a str. - Cas de test :
plus_long("court", "beaucoup plus long")->"beaucoup plus long",plus_long("ab", "cd")->"ab".
Premier mot
Renvoyer le premier mot d'une chaîne (jusqu'au premier espace, ou toute la chaîne). Ici aucune annotation n'est nécessaire - explique pourquoi en commentaire.
- Objectif : élision des durées de vie (une seule référence en entrée -> la sortie prend la même).
- Signature suggérée :
fn premier_mot(s: &str) -> &str. - Cas de test :
premier_mot("bonjour le monde")->"bonjour",premier_mot("salut")->"salut",premier_mot("")->"".
Struct qui emprunte
Définir struct Extrait<'a> { texte: &'a str } et une méthode
mot(&self, i: usize) -> Option<&str> qui renvoie le i-ème mot.
- Objectif : paramètre de durée de vie sur une
struct,impl<'a>. - Signature suggérée :
impl<'a> Extrait<'a> { fn mot(&self, i: usize) -> Option<&str> }. - Cas de test :
Extrait { texte: "un deux trois" }.mot(1)->Some("deux"),.mot(9)->None.
Min d'un slice
Renvoyer une référence vers le plus petit élément d'un slice, ou None s'il est
vide.
- Objectif :
fn f<'a>(v: &'a [i32]) -> Option<&'a i32>, ou.iter().min(). - Signature suggérée :
fn min_ref<'a>(v: &'a [i32]) -> Option<&'a i32>. - Cas de test :
min_ref(&[4, 1, 7])->Some(&1),min_ref(&[])->None.