作为学习练习,我正在尝试编写一个生成两个声明的宏。在这个例子中,我尝试编写一个宏来为一个枚举生成声明,其中包含一个字段和一个包含该字段实例的静态向量:
#![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宏不支持的。
发布于 2014-10-01 15:56:26
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
https://stackoverflow.com/questions/26136604
复制相似问题