Rust 宏中的元组索引
我试图在宏中索引数据元组,该宏为trait实现生成签名,但有一些错误。我可以索引元组还是需要其他解决方案?用我在谷歌找到的Rust 宏中的元组索引,rust,rust-macros,rust-decl-macros,Rust,Rust Macros,Rust Decl Macros,我试图在宏中索引数据元组,该宏为trait实现生成签名,但有一些错误。我可以索引元组还是需要其他解决方案?用我在谷歌找到的tuple\u索引进行黑客攻击,但它对我不起作用 我可以索引元组还是需要其他解决方案 不可以。表达式$idx+1将生成不同的标记,例如0,+,1,并且无法将其计算为声明性宏中的单个文字标记。您的代码没有给出任何错误。您可能希望在函数中使用该宏。请提供一个例子,我们可以重现您在代码中遇到的错误,例如,顺便说一句:您的代码有效。。。你可能想更具体地说明什么有效,什么无效。这就是
tuple\u索引进行黑客攻击,但它对我不起作用
我可以索引元组还是需要其他解决方案
不可以。表达式$idx+1
将生成不同的标记,例如0
,+
,1
,并且无法将其计算为声明性宏中的单个文字标记。您的代码没有给出任何错误。您可能希望在函数中使用该宏。请提供一个例子,我们可以重现您在代码中遇到的错误,例如,顺便说一句:您的代码有效。。。你可能想更具体地说明什么有效,什么无效。这就是为什么提供一个完全有效/无效的示例很重要。只有在那种情况下我们才能帮忙you@hellow需要调用gen_packer,而不是tuple_index。我正在更新code@AlexanderKudzin什么是A
?@hellow字母表示泛型(非变量)
macro_rules! expr { ($x:expr) => ($x) } // HACK
macro_rules! tuple_index {
($tuple:expr, $idx:tt) => { expr!($tuple.$idx) }
}
macro_rules! gen_packer {
(@step $data: expr, $_idx:expr,) => {};
(@step $data: expr, $idx:expr, $T:ident, $($tail:ident,)*) => {
// out.append(&mut $T::pack(tuple_index!(data,$idx)));
tuple_index!($data, $idx);
gen_packer!(@step $data, $idx + 1, $($tail,)*);
};
($($T:ident),*) => {
impl<$($T,)+> Packer<($($T,)+)> for Iproto
where $($T: Pack<$T>,)+
{
fn pack(self, data: ($($T,)+)) -> Vec<u8> {
let mut out = vec![];
gen_packer!(@step data, 0, $($T,)*);
return out
}
}
}
}
gen_packer!(A);