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.