Section courante

A propos

Section administrative du site

unimplemented

Non implémenté
Rust

Syntaxe

macro_rules! unimplemented {
   () => { ... };
   ($($arg:tt)+) => { ... };
}

Description

Cette macro permet d'indiquer une fonction ou un bloc non implémenté, en provoquant une panique avec le message "not implemented".

Remarques

Permet d'indiquer le code non implémenté en affichant un message d'erreur «non implémenté».

Cela permet de vérifier le type de votre code, ce qui est utile si vous prototypez ou implémentez un trait nécessitant plusieurs méthodes que vous ne prévoyez pas d'utiliser toutes.

La différence entre unimplemented! et todo! réside dans le fait que, tandis que todo! indique une intention d'implémenter la fonctionnalité ultérieurement et que le message est « pas encore implémenté », unimplemented! ne fait aucune telle déclaration. Son message est « non implémenté ».

Paniques

Cette macro provoquera toujours une panique !, car « unimplemented !» n'est qu'un raccourci pour « panic !» avec un message fixe et spécifique.

Comme «panic !», cette macro possède une deuxième forme pour afficher des valeurs personnalisées.

Exemples

Disons que nous avons un trait Foo :

  1. trait Foo {
  2.     fn bar(&self) -> u8;
  3.     fn baz(&self);
  4.     fn qux(&self) -> Result<u64, ()>;
  5. }

Nous souhaitons implémenter Foo pour «MyStruct», mais pour une raison inconnue, seule la fonction bar() semble pertinente. baz() et qux() devront toujours être définis dans notre implémentation de Foo, mais nous pouvons utiliser unimplemented! dans leurs définitions pour permettre la compilation de notre code.

Nous souhaitons toujours que notre programme s'arrête si les méthodes non implémentées sont atteintes.

  1. struct MyStruct;
  2.  
  3. impl Foo for MyStruct {
  4.     fn bar(&self) -> u8 {
  5.         1 + 1
  6.     }
  7.  
  8.     fn baz(&self) {
  9.         // Cela n'a aucun sens de `baz` a `MyStruct`, nous n'avons donc aucune logique ici.
  10.         // Cela affichera « thread 'main' paniqué à 'not implemented' ».
  11.         unimplemented!();
  12.     }
  13.  
  14.     fn qux(&self) -> Result<u64, ()> {
  15.         // Nous avons une certaine logique ici : nous pouvons ajouter un message à unimplemented! pour signaler notre omission.
  16.         // Ceci affichera :
  17.         // « Le thread 'main' a paniqué à « non implémenté : MyStruct n'est pas quxable ».
  18.         unimplemented!("MyStruct isn't quxable");
  19.     }
  20. }
  21.  
  22. fn main() {
  23.     let s = MyStruct;
  24.     s.bar();
  25. }


Dernière mise à jour : Mardi, le 5 Août 2025