闭包不用Option包裹时可以编译过,包裹后提示s生命周期不满足
struct P<'a> {
v: Vec<&'a String>,
}
impl<'a> P<'a> {
fn test<F: FnOnce(& mut P<'a>)+'a>(&mut self, f: Option<F>) {
if let Some(f) = f {
f(self);
}
}
}
fn main() {
let s = "11".to_string();
let mut p = P { v: vec![] };
p.test(Some(|p: & mut P<'_>| {
p.v.push(&s);
}));
println!("{:?}", p.v);
}
1
共 2 条评论, 1 页
评论区
写评论谢谢,编译器无法识别的话只能是换个写法了
--
👇
TinusgragLin: 我 google 了一阵,好像是个老问题了,编译器在这种情况下似乎会变得很笨。如果你把那个 f 提出来先做为一个变量再传给没加 Option 的 test 函数,也会出现同样的错误提示:
只能想法子给编译器一点提示了:
我 google 了一阵,好像是个老问题了,编译器在这种情况下似乎会变得很笨。如果你把那个 f 提出来先做为一个变量再传给没加 Option 的 test 函数,也会出现同样的错误提示:
只能想法子给编译器一点提示了: