【问题标题】:Pass entire macro input to another macro将整个宏输入传递给另一个宏
【发布时间】:2015-10-28 14:43:09
【问题描述】:

我正在尝试创建一个简单的宏来调用vec!,然后在返回新向量之前进行一些简单的处理:

macro_rules! sorted_vec {
    ($x:expr) => {
        {
            let v = vec![$x];
            v.sort();
            v
        }
    }
}

问题是我的宏正在尝试解析语法,所以它抱怨逗号等。这是有道理的,但我不知道如何解决它。我不认为expr 是要使用的正确片段说明符。如何让它在不处理的情况下将原始输入传递给vec!

【问题讨论】:

    标签: rust rust-macros rust-decl-macros


    【解决方案1】:

    您想要的片段说明符是tt(令牌树)。 tt 只是一个任意有效的 rust-token,如关键字或运算符或带有任意 tts 的括号/块/方括号。结合可变参数宏,您可以获得可以直接传递给另一个宏的无限令牌

    macro_rules! sorted_vec {
        ($($x:tt)*) => {
            {
                let mut v = vec![$($x)*];
                v.sort();
                v
            }
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    相关资源
    最近更新 更多