Section courante

A propos

Section administrative du site

format_args

Arguments de format
Rust

Syntaxe

macro_rules! format_args {
   ($fmt:expr) => { ... };
   ($fmt:expr, $($args:tt)*) => { ... };
}

Description

Cette macro permet de construire des arguments de formatage sans générer directement une String, servant de base à d'autres macros comme print! ou write!.

Remarques

Permet de construire les paramètres des autres macros de formatage de chaîne.

Cette macro utilise une chaîne de formatage littérale contenant {} pour chaque argument supplémentaire passé. format_args! prépare les paramètres supplémentaires afin que la sortie puisse être interprétée comme une chaîne et canonique les arguments en un seul type. Toute valeur implémentant le trait Display peut être passée à format_args!, tout comme toute implémentation Debug peut être passée à un {:?} dans la chaîne de formatage.

Cette macro produit une valeur de type fmt::Arguments. Cette valeur peut être passée aux macros dans std::fmt pour effectuer une redirection utile. Toutes les autres macros de formatage (format!, write!, println!,...) sont proxyées via celle-ci. format_args!, contrairement à ses macros dérivées, évite les allocations de tas.

Vous pouvez utiliser la valeur fmt::Arguments renvoyée par format_args! dans les contextes Debug et Display, comme indiqué ci-dessous. L'exemple montre également que Debug et Display formatent la même chose : la chaîne de format interpolée dans format_args!.

  1. let debug = format!("{:?}", format_args!("{} foo {:?}", 1, 2));
  2. let display = format!("{}", format_args!("{} foo {:?}", 1, 2));
  3. assert_eq!("1 foo 2", display);
  4. assert_eq!(display, debug);

Exemples

  1. use std::fmt;
  2.  
  3. let s = fmt::format(format_args!("Bonjour {}", "le monde"));
  4. assert_eq!(s, format!("Bonjour {}", "le monde"));

Limite de durée de vie

Sauf lorsqu'aucun argument de formatage n'est utilisé, la valeur fmt::Arguments produite emprunte des valeurs temporaires; elle ne peut donc être utilisée que dans la même expression et ne peut pas être stockée pour une utilisation ultérieure. Il s'agit d'une limitation connue (voir #92698).



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