将整个宏输入传递给另一个宏
Pass entire macro input to another macro
我正在尝试制作一个简单的宏来调用 vec!
接收到的任何内容,然后在返回新向量之前进行一些简单的处理:
macro_rules! sorted_vec {
($x:expr) => {
{
let v = vec![$x];
v.sort();
v
}
}
}
问题是我的宏正在尝试解析语法,因此它会抱怨逗号等问题。这是有道理的,但我不确定如何解决它。我认为 expr
不是要使用的正确片段说明符。如何让它在不处理的情况下将原始输入传递给 vec!
?
您想要的片段说明符是tt
(令牌树)。 tt
只是一个任意有效的 rust-token,比如关键字或运算符,或者是一个 bracket/block/square-bracket,里面有任意 tt
。结合可变参数宏,您将获得可以直接传递给另一个宏的无限令牌
macro_rules! sorted_vec {
($($x:tt)*) => {
{
let mut v = vec![$($x)*];
v.sort();
v
}
}
}
我正在尝试制作一个简单的宏来调用 vec!
接收到的任何内容,然后在返回新向量之前进行一些简单的处理:
macro_rules! sorted_vec {
($x:expr) => {
{
let v = vec![$x];
v.sort();
v
}
}
}
问题是我的宏正在尝试解析语法,因此它会抱怨逗号等问题。这是有道理的,但我不确定如何解决它。我认为 expr
不是要使用的正确片段说明符。如何让它在不处理的情况下将原始输入传递给 vec!
?
您想要的片段说明符是tt
(令牌树)。 tt
只是一个任意有效的 rust-token,比如关键字或运算符,或者是一个 bracket/block/square-bracket,里面有任意 tt
。结合可变参数宏,您将获得可以直接传递给另一个宏的无限令牌
macro_rules! sorted_vec {
($($x:tt)*) => {
{
let mut v = vec![$($x)*];
v.sort();
v
}
}
}