tipos sirve realizan qué para openoffice modulos macro las ejemplos como macros rust

sirve - ¿Cómo se permiten comas finales opcionales en macros?



qué es un macro en access y para qué sirve (1)

Puede manejar ambos casos ... manejando ambos casos:

macro_rules! define_enum { ($Name:ident { $($Variant:ident,)* }) => { pub enum $Name { None, $($Variant),*, } }; ($Name:ident { $($Variant:ident),* }) => { define_enum!($Name { $($Variant,)* }); }; } define_enum!(Foo1 { A, B }); define_enum!(Foo2 { A, B, }); fn main() {}

Hemos trasladado la implementación principal a la versión que espera la coma final. Luego agregamos una segunda cláusula que empareja el caso con la coma que falta y la reescribe a la versión con una coma.

DK. señala una alternativa , haciendo que la coma final sea opcional:

($Name:ident { $($Variant:ident),* $(,)* }) => {

Esto evita la necesidad de delegar de una implementación a la otra.

Aquí hay un ejemplo sintético de lo que quiero:

macro_rules! define_enum { ($Name:ident { $($Variant:ident),* }) => { pub enum $Name { None, $($Variant),*, } } } define_enum!(Foo { A, B });

Este código compila, pero si le agrega una coma:

define_enum!(Foo { A, B, }); // ^

La compilación falla. Puedo arreglarlo con:

($Name:ident { $($Variant:ident,)* }) // ^

pero luego define_enum!(Foo { A, B }); falla,

¿Cómo debo escribir una macro para manejar ambos casos?

define_enum!(Foo { A, B }); define_enum!(Foo { A, B, });