【问题标题】:Can a single Rust macro generate multiple declarations?一个 Rust 宏可以生成多个声明吗?
【发布时间】:2014-11-26 00:18:08
【问题描述】:

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

#![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 宏是否不支持。

【问题讨论】:

    标签: macros rust


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2017-08-29
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-31
      相关资源
      最近更新 更多