将整个宏输入传递给另一个宏

时间:2015-08-05 17:24:40

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

我正在尝试制作一个简单的宏,用它接收的任何内容调用vec!,然后在返回新的向量之前进行一些简单的处理:

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

问题是我的宏试图解析语法,所以它抱怨逗号等等。这是有道理的,但我不知道如何解决它。我不认为expr是正确的片段说明符。如何将原始输入传递给vec!而不进行处理?

1 个答案:

答案 0 :(得分:5)

您想要的片段说明符是A(令牌树)。 tt只是一个任意有效的锈色标记,如关键字或操作符或括号/块/方括号,内部有任意tt个。结合可变参数宏,您将获得可以直接传递给另一个宏的无限令牌

tt