write |
Écriture |
|---|---|
| Rust | |
Syntaxe
|
macro_rules! write { ($dst:expr, $($arg:tt)*) => { ... }; } |
Description
Cette macro permet d'écrire des données formatées dans un tampon implémentant le trait std::fmt::Write, sans saut de ligne.
Remarques
Permet d'écrire des données formatées dans un tampon.
Cette macro accepte un «writer», une chaîne de format et une liste de paramètres. Les arguments sont formatés selon la chaîne de format spécifiée et le résultat est transmis au writer. Ce writer peut être n'importe quelle valeur associée à une méthode write_fmt ; elle provient généralement d'une implémentation du trait fmt::Write ou io::Write. La macro renvoie le résultat de la méthode write_fmt ; généralement un fmt::Result ou un io::Result.
Exemples
Un module peut importer à la fois std::fmt::Write et std::io::Write, et appeler write! sur les objets implémentant l'un ou l'autre, car les objets n'implémentent généralement pas les deux. Cependant, le module doit éviter tout conflit entre les noms de traits, par exemple en les important sous le nom _ ou en les renommant d'une autre manière :
- use std::fmt::Write as _;
- use std::io::Write as _;
-
- fn main() -> Result<(), Box<dyn std::error::Error>> {
- let mut s = String::new();
- let mut v = Vec::new();
-
- write!(&mut s, "{} {}", "abc", 123)?; // utilises fmt::Write::write_fmt
- write!(&mut v, "s = {:?}", s)?; // utilises io::Write::write_fmt
- assert_eq!(v, b"s = \"abc 123\"");
- Ok(())
- }
Si vous avez également besoin des noms de traits eux-mêmes, par exemple pour implémenter l'un ou les deux sur vos types, importez le module conteneur, puis nommez-les avec un préfixe :
Remarque : cette macro peut également être utilisée dans les configurations no_std. Dans ce cas, vous êtes responsable des détails d'implémentation des composantes.