2014-10-01 78 views
1

作为一种学习练习,我试图编写一个生成两个声明的宏。在这个例子中,我尝试写了一个单场枚举和包含字段的实例的静态向量生成声明宏:一个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

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

相关问题