将逗号设为可选
作为DK.指出 https://stackoverflow.com/questions/43143327/how-to-allow-optional-trailing-commas-in-macros/43143459?noredirect=1#comment73365939_43143459,尾随逗号可以是可选的。
铁锈1.32
您可以使用?
宏重复器来编写此内容并不允许多个尾随逗号:
($Name:ident { $($Variant:ident),* $(,)? }) => {
// ^^^^^
之前的版本
这允许多个尾随逗号:
($Name:ident { $($Variant:ident),* $(,)* }) => {
// ^^^^^
处理这两种情况
或者您可以通过...处理这两种情况来处理这两种情况:
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() {}
我们已将主要实现移至需要尾随逗号的版本。然后,我们添加了第二个子句,该子句与缺少逗号的大小写相匹配,并将其重写为带有逗号的版本。