Section courante

A propos

Section administrative du site

try (dépréciée)

Essai
Rust

Syntaxe

macro_rules! try {
   ($expr:expr $(,)?) => { ... };
}

Description

Cette macro permettait de déballer un résultat (Result) ou de propager l'erreur automatiquement, mais elle est maintenant remplacée par l'opérateur ?.

Remarques

Obsolète depuis la version 1.39.0 : utilisez plutôt l'opérateur «?»

Permet de décompresser un résultat ou propage son erreur.

L'opérateur ? a été ajouté pour remplacer try! et doit être utilisé à la place. De plus, try est un mot réservé en Rust 2018 ; si vous devez l'utiliser, vous devrez donc utiliser la syntaxe d'identifiant brut : r#try.

try! correspond au résultat donné. Dans le cas de la variante Ok, l'expression a la valeur de la valeur encapsulée.

Dans le cas de la variante Err, l'erreur interne est récupérée. try! effectue ensuite la conversion avec From. Cela permet une conversion automatique entre les erreurs spécialisées et les erreurs plus générales. L'erreur résultante est alors immédiatement renvoyée.

En raison du retour anticipé, try! ne peut être utilisé que dans les fonctions renvoyant un résultat.

Exemples

  1. use std::io;
  2. use std::fs::File;
  3. use std::io::prelude::*;
  4.  
  5. enum MyError {
  6.     FileWriteError
  7. }
  8.  
  9. impl From<io::Error> for MyError {
  10.     fn from(e: io::Error) -> MyError {
  11.         MyError::FileWriteError
  12.     }
  13. }
  14.  
  15. // The preferred method of quick returning Errors
  16. fn write_to_file_question() -> Result<(), MyError> {
  17.     let mut file = File::create("my_best_friends.txt")?;
  18.     file.write_all(b"Voici une liste de mes meilleurs amis.")?;
  19.     Ok(())
  20. }
  21.  
  22. // The previous method of quick returning Errors
  23. fn write_to_file_using_try() -> Result<(), MyError> {
  24.     let mut file = r#try!(File::create("my_best_friends.txt"));
  25.     r#try!(file.write_all(b"Voici une liste de mes meilleurs amis."));
  26.     Ok(())
  27. }
  28.  
  29. // This is equivalent to:
  30. fn write_to_file_using_match() -> Result<(), MyError> {
  31.     let mut file = r#try!(File::create("my_best_friends.txt"));
  32.     match file.write_all(b"Voici une liste de mes meilleurs amis.") {
  33.         Ok(v) => v,
  34.         Err(e) => return Err(From::from(e)),
  35.     }
  36.     Ok(())
  37. }    


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