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 :
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.
- struct MyStruct;
-
- impl Foo for MyStruct {
- fn bar(&self) -> u8 {
- 1 + 1
- }
-
- fn baz(&self) {
- // Cela n'a aucun sens de `baz` a `MyStruct`, nous n'avons donc aucune logique ici.
- // Cela affichera « thread 'main' paniqué à 'not implemented' ».
- unimplemented!();
- }
-
- fn qux(&self) -> Result<u64, ()> {
- // Nous avons une certaine logique ici : nous pouvons ajouter un message à unimplemented! pour signaler notre omission.
- // Ceci affichera :
- // « Le thread 'main' a paniqué à « non implémenté : MyStruct n'est pas quxable ».
- unimplemented!("MyStruct isn't quxable");
- }
- }
-
- fn main() {
- let s = MyStruct;
- s.bar();
- }