【发布时间】:2026-02-03 03:25:01
【问题描述】:
我正在尝试使用filter_map 进行一些练习。
下面的函数创建一个BufRead,然后选择与正则表达式匹配的行。我希望输出为"aaa",但编译器给了我错误:
returns a value referencing data owned by the current function" at line 7 `reg.captures(ss)`.
我知道我不能返回引用函数拥有的数据的值。但我不知道如何在这里避免它。当line 的类型是&str 时,它可以工作。但是在这里,line 的类型是std::string::String。
你能给我一些提示或指导我看一些文件吗?我已经阅读了一些文档,但不明白如何避免错误。
use regex::Regex; // 1.4.1
use std::io::{self, BufRead as _};
fn main() {
let reg = Regex::new(r"^(a+)").unwrap();
io::Cursor::new(b"aaa\nbbb\nccc")
.lines()
.filter_map(|line| {
let ss = &line.unwrap()[..];
reg.captures(ss)
})
.map(|cap| cap[1].to_string())
.for_each(|x| println!("{}", x));
}
【问题讨论】: