如何将自有对象迭代器转为引用迭代器?Rust TokenStream场景
解决方案
你的推测完全正确:TokenStream调用into_iter()得到的是消费型迭代器,它会转移内部TokenTree的所有权,因此迭代器的Item类型是TokenTree,和你期望的&TokenTree不匹配,才会触发类型错误。
要获取引用类型的迭代器且不消耗TokenStream,直接使用TokenStream的iter()方法即可——这个方法专门为&TokenStream生成引用型迭代器,其Item正是&TokenTree。修改后的代码如下:
use proc_macro2::{TokenStream, TokenTree}; fn filter(tokens: &TokenStream, param: MyParams) -> impl Iterator<Item = &TokenTree> { tokens.iter().filter(|token| { // 在这里编写你的过滤逻辑,参数token是&TokenTree类型 // 示例:根据param的条件进行筛选 // matches!(token, TokenTree::Ident(ident) if ident.to_string() == param.target) true }) }
iter()方法不会转移TokenStream的所有权,只是遍历其内部元素的引用,完全符合你的需求。
内容的提问来源于stack exchange,提问作者sak
相关产品推荐
相关产品推荐

