Macros 单个Rust宏能否生成多个声明?

Macros 单个Rust宏能否生成多个声明?,macros,rust,Macros,Rust,作为一个学习练习,我试图编写一个生成两个声明的宏。在本例中,我尝试编写一个宏,该宏使用单个字段和包含该字段实例的静态向量为枚举生成声明: #![feature(macro_rules)] macro_rules! create_enum( ( $enum_name : ident , $a_field_name : ident ) => { enum $enum_name { $a_field_name };

作为一个学习练习,我试图编写一个生成两个声明的宏。在本例中,我尝试编写一个宏,该宏使用单个字段和包含该字段实例的静态向量为枚举生成声明:

#![feature(macro_rules)]
macro_rules! create_enum(
        ( $enum_name : ident , $a_field_name : ident ) => 
        {
            enum $enum_name { $a_field_name };
            static foovec: [$enum_name,..1] = [ $a_field_name ]; 
        };
)

create_enum! (Direction , NORTH)
我得到一个错误:

enums.rs:5:36: 5:37 error: macro expansion ignores token `;` and any following
enums.rs:5              enum $enum_name { $a_field_name };

我尝试了10种标点符号变体,但都没有成功,所以我开始怀疑rust宏是否不支持这种变体。

enum
声明不需要
在末尾

这对我很有用:

#![feature(macro_rules)]
macro_rules! create_enum(
        ( $enum_name : ident , $a_field_name : ident ) => 
        {
            enum $enum_name { $a_field_name }
            static foovec: [$enum_name,..1] = [ $a_field_name ]; 
        };
)

create_enum! (Direction , NORTH)
演示: