2014-10-01 66 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

相關問題