Rust 如何在递归宏扩展中调用concat_ident?
我试图创建一个宏来展开一组名称并定义结构的字段:Rust 如何在递归宏扩展中调用concat_ident?,rust,Rust,我试图创建一个宏来展开一组名称并定义结构的字段: macro_rules! expand { ($($name:ident),*) => { pub struct Test { $( concat_idents!(var_, $name) : Vec<$name> ),* } } } //fails expand!(a,b,c); macro\u规则!扩展{ ($($name:ident),*)=>
macro_rules! expand {
($($name:ident),*) => {
pub struct Test {
$(
concat_idents!(var_, $name) : Vec<$name>
),*
}
}
}
//fails
expand!(a,b,c);
macro\u规则!扩展{
($($name:ident),*)=>{
pub结构测试{
$(
concat_idents!(变量,$name):Vec
),*
}
}
}
//失败
扩大(a、b、c);
这会失败,因为编译器无法识别
concat_ident代码>作为宏。我该如何解决这个问题呢?目前还不可能以任何方式解决这个问题。替换($foo
)是可以的,但不是宏调用。这个响应已经过时,在宏微分内部进行宏调用是完全合法的。我每晚都在使用1.24.0版。@LukeDupin:没有;答案仍然正确,没有任何变化:解析器不接受字段名位置的宏。要删除宏规则代码>从等式中,尝试结构测试{concat_idents!(var_u,a):u8}
:它无法解析。