【发布时间】:2020-06-26 05:38:31
【问题描述】:
代码:
use std::fmt::Debug;
trait DoSomething<T> {
fn do_sth(&self, value: T);
}
impl<T: Debug> DoSomething<T> for &usize {
fn do_sth(&self, value: T) {
println!("{:?}", value);
}
}
fn foo(b: Box<DoSomething<&i32>>) {
let s = 123;
b.do_sth(&s);
}
fn main() {
foo(Box::new(&3));
}
编译器错误信息是:
error[E0597]: `s` does not live long enough
--> src/main.rs:15:14
|
13 | fn foo(b: Box<DoSomething<&i32>>) {
| - has type `std::boxed::Box<(dyn DoSomething<&'1 i32> + '_)>`
14 | let s = 123;
15 | b.do_sth(&s);
| ---------^^-
| | |
| | borrowed value does not live long enough
| argument requires that `s` is borrowed for `'1`
16 | }
| - `s` dropped here while still borrowed
我认为这个&s只是在foo中使用,foo方法结束并且不再借用了?但事实并非如此。谁还在借?如何解决这个问题?
【问题讨论】:
标签: rust