Form
также имеет параметр времени жизни.Если вы связываете его со временем жизни FromForm
, то вы немного продвинетесь вперед:
impl<'f, T> Consumer<T> where T: FromForm<'f> {
fn new(form: Form<'f, T>) -> Self {
Consumer(form.into_inner())
}
fn get(&self) -> &T {
&self.0
}
}
Как правило, если вы возвращаете объект, который зависит от данных в другом объекте, то выВам нужно будет связать их времена жизни вместе, как это.
На этом этапе вы увидите еще одну ошибку, которая дает вам всю необходимую информацию для ее исправления:
error[E0310]: the parameter type `T` may not live long enough
--> src/main.rs:50:17
|
48 | impl<'f, T> Consumer<T> where T: FromForm<'f> {
| - help: consider adding an explicit lifetime bound `T: 'static`...
49 | fn new(form: Form<'f, T>) -> Self {
50 | Consumer(form.into_inner())
| ^^^^^^^^^^
|
note: ...so that the type `T` will meet its required lifetime bounds
--> src/main.rs:50:17
|
50 | Consumer(form.into_inner())
| ^^^^^^^^^^
Метод into_inner
в Form
требует, чтобы его параметр типа T
имел время жизни 'static
, и в сообщении об ошибке предлагается добавить это ограничение.
При этих изменениях онскомпилирует:
impl<'f, T: 'static> Consumer<T> where T: FromForm<'f> {
fn new(form: Form<'f, T>) -> Self {
Consumer(form.into_inner())
}
fn get(&self) -> &T {
&self.0
}
}