【问题标题】:How to map to references if it's not an Iterator<Item=&T>?如果它不是 Iterator<Item=T>,如何映射到引用?
【发布时间】:2023-01-14 08:41:46
【问题描述】:

我有一个接收 Iterator<Item=AsRef> 的函数,我想从这个迭代器中获取一个子字符串数组。问题是在映射时,.map() 获得了 AsRef 的所有权,而我无法返回 as_ref()。我怎样才能把这个迭代器变成像 Vec::iter 这样的引用迭代器?示例代码:

fn a(lines: impl Iterator<Item=impl AsRef<str>>) {
    println!("{:?}", lines.map(|s| s.as_ref()).collect::<Vec<&str>>());
}

a(vec!["one".to_string(), "two".to_string()].iter());

我找到的一个解决方案是使用 for 循环并在循环主体中调用 as_ref 并创建一个引用数组,但我想使用 map 以函数式风格来完成它。

【问题讨论】:

  • 我不确定您使用 for 循环尝试了什么(您应该将其包含在您的问题中!),但是当我使用 for 循环翻译您的功能样式代码时,它也是 doesn't work

标签: rust iterator borrow-checker


【解决方案1】:

仅使用迭代器有点问题。如签名所述,迭代器可以非常匹配拥有 Item(s) 并将所有权转移给闭包内的您。考虑改用&amp;impl AsRef&lt;str&gt;。在调用方站点提供这应该不是问题。

【讨论】:

    猜你喜欢
    • 2021-12-10
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    相关资源
    最近更新 更多