У меня есть метод ржавчины, который возвращает Result<_, MyError>
. Этот метод запускается в структуре State
, а MyError
имеет спецификатор времени жизни 'a
, так как он должен содержать &str
с.Как вернуть ошибку, когда она содержит ссылку?
Я пытаюсь написать черту так:
trait MyTrait {
type Error;
fn work(&self) -> Result<(), Self::Error>;
}
impl<'a> MyTrait for MyImpl<'a> {
type Error = MyError<'a>;
fn work(&self) -> Result<(), MyError<'a>> {
let state = State::new();
state.work() // returns Result<(), MyError> but state doesn't live long enough
}
}
Как я могу получить эту ошибку? Должен ли я изменить MyError
, чтобы сохранить String
вместо &'a str
? Должен ли я держать state
внутри MyImpl
? Действительно ли это trait
?
Я хочу создать State
за каждый пробег do()
.
Вот MCVE:
enum MyError<'a> {
Some(&'a str),
}
trait MyTrait {
type Error;
fn work(&self) -> Result<(), Self::Error>;
}
struct MyImpl<'a> {
pub some_string: &'a str,
}
impl<'a> MyTrait for MyImpl<'a> {
type Error = MyError<'a>;
fn work(&self) -> Result<(), MyError<'a>> {
let state = State::new();
state.work() // returns Result<(), MyError> but state doesn't live long enough
}
}
struct State;
impl State {
pub fn new() -> State {
State
}
pub fn work(&self) -> Result<(), MyError> {
Err(MyError::Some("hi"))
}
}
fn main() {}
Вы также не указали определение 'MyError' и как именно' State :: work() 'создает' MyError'. Если он действительно содержит строковые срезы, привязанные к времени жизни 'state', было бы невозможно вернуть' MyError', потому что 'state' уничтожается прямо в' MyImpl :: work() '. –
@VladimirMatveev Это, очевидно, проблема, но как я могу привязать их к 'MyError' вместо этого? – dragostis