cfg_match (expérimental) |
Correspondance de configuration |
|---|---|
| Rust | |
Syntaxe
|
pub macro cfg_match { ({ $($tt:tt)* }) => { ... }, (_ => { $($output:tt)* }) => { ... }, ($cfg:meta => $output:tt $($($rest:tt)+)?) => { ... }, } |
Description
Cette macro permet de définir des structures similaires à match en fonction des conditions de compilation (#[cfg]), pour sélectionner du code selon les plateformes ou les options activées.
Remarques
Il s'agit d'une macro permettant de définir des instructions de type #[cfg].
Elle est similaire à la macro de préprocesseur C if/elif en permettant la définition d'une cascade de cas #[cfg], en émettant l'implémentation correspondant en premier.
Cela vous permet de fournir facilement une longue liste de blocs de code #[cfg] sans avoir à réécrire chaque clause plusieurs fois.
Les bras de correspondance génériques _ de fin sont facultatifs et indiquent une branche de secours lorsque toutes les déclarations précédentes ne sont pas évaluées à true.
Exemple
Si vous le souhaitez, il est possible de renvoyer des expressions en utilisant des accolades environnantes :
- #![feature(cfg_match)]
-
- let _some_string = cfg_match! {{
- unix => { "Un grand pouvoir entraîne de grosses factures d'électricité" }
- _ => { "Derrière chaque régime réussi se cache une pizza non surveillée" }
- }};