"found struct `ThereIsNoIteratorInRepetition`" 尝试使用 `quote!` 重复向量时

"found struct `ThereIsNoIteratorInRepetition`" when trying to repeat over a vector using `quote!`

我正在尝试创建 VecTokenStream 的列表,然后在另一个 quote! 宏中使用该列表:

    let list: Vec<_> = some_data
        .iter()
        .map(
            |item| {
                quote!{/*...*/}
            },
        )
        .collect();

    let generated = quote! {
        fn hello_world() {
            #(list);*
        }
    };

然而,在编译时,我收到了这个错误:

expected struct `HasIterator`, found struct `ThereIsNoIteratorInRepetition`

the macro's documentation 看来 TokenStream 应该在插值中有效,因为它实现了 ToTokens 特性。另外,列表是一个Vec,也明确允许在循环插值中使用。

为什么明明在使用有效的迭代器时却出现 ThereIsNoIteratorInRepetition 错误?

#(list);*

应该是

#(#list);*

我错过了重复插值中的内部插值 #,这让我疯狂了好几个小时。把它留在这里以防有人遇到同样的事情。

我猜ThereIsNoIteratorInRepetition的意思是在repetition中没有找到插值,当我原本以为是插值被正确解析,但没有被接受为迭代器。