gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:58:17 25 4
gpt4 key购买 nike

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

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

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

最佳答案

您需要的片段说明符是 tt( token 树)。 tt 只是一个任意有效的 rust-token,如关键字或运算符或括号/ block /方括号,其中包含任意 tt。结合可变参数宏,您可以获得可以直接传递给另一个宏的无限标记

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

关于rust - 将整个宏输入传递给另一个宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31839016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com