0

我收到此错误:

该特征quote::to_tokens::ToTokens未实现 proc_macro::Ident

当我尝试运行此代码时:

#[proc_macro_hack]
pub fn between(input: TokenStream) -> TokenStream {
    let idents = input
        .into_iter()
        .map(|i| match i {
            TokenTree::Ident(b) => {
                b
            },
            _ => panic!()
        })
        .collect::<Vec<_>>();

    let new_token_stream = quote! {
        (#(#idents),*)
    };

    new_token_stream.into()
}

这就是我想使用它的方式:

fn main() {
    let a = 1;
    let b = 2;

    // Expand to (a, b);
    between!(a, b);
}

我还有一个包含上述代码的小项目:https ://bitbucket.org/JoshSinne/pm/src/master/ 。为什么我不能转换Ident内部令牌?我尝试使用parseinto但这对我来说并没有奏效。谢谢!

4

1 回答 1

1

syn并且quote是针对 proc_macro2 的替代实现而proc_macro构建。如果你想使用它们,你应该先将你的转换proc_macro::TokenStreamproc_macro2::TokenStream,进行必要的操作,最后再转换回来。这两种转换都可以使用From/进行Into,因为它们是在两个方向上实现的。

于 2020-04-25T14:04:38.877 回答