单个Rust宏可以生成多个声明吗?

时间:2014-10-01 07:51:08

标签: macros rust

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

#![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次标点符号变化而没有成功,所以我开始怀疑这是不是锈宏不支持。

1 个答案:

答案 0 :(得分:1)

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)

演示:http://is.gd/JxMAb1