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

标签 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 种标点符号变化,但没有成功,所以我开始怀疑 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)

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

关于macros - 单个 Rust 宏可以生成多个声明吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26136604/

相关文章:

c - 预处理器宏定义是否需要在头文件中大写?

我们可以将 MACRO 名称定义为特定字符串吗?

rust - 在 Rust 中使用 'find' 对项目的可变引用

rust - 为什么我的测试会更改字节数组的长度?

C 预处理器宏替换#if#else 语句

c++ - 错误 : expected primary-expression before ‘if’

visual-studio-code - 我可以使用 VS Code 批量编辑多个文件吗?

macros - 在宏中构建枚举

rust - 如何在 Rust 中实现获取缓存或加载操作?

rust - 生命周期注释,或 &str vs String