Я пытаюсь разобрать серию для токенов, но когда я пытаюсь реализовать свой синтаксический анализ, я получаю ошибку, связанную с эталонными сроками службы. Я думал, что создание коробчатой версии будет касаться любых проблем с подсчетом ссылок или временем жизни. Код выглядит следующим образом.Продление срока службы заимствований в ржавчине
impl Parse for TokenTree {
fn parse(&mut self) -> Tree {
match self.clone() {
TtDelimited(_, y) => {
let mut y2 = box (*y).clone();
match y2.delim {
token::DelimToken::Paren => y2.parse(),
_ => panic!("not done yet"),
}
}
TtToken(_, t) => E(t),
_ => panic!("not done yet"),
}
}
}
ошибки, которые возникают у меня, делают проблему ясной, но я не могу найти никакой информации по решению этой конкретной проблемы.
35:51 error: `*y2` does not live long enough
token::DelimToken::Paren => y2.parse(),
^~
42:6 note: reference must be valid for the anonymous lifetime #1 defined on the block at 30:31...
fn parse(&mut self) -> Tree{
match self.clone(){
TtDelimited(_, y) => {
let mut y2 = box() (*y).clone();
match y2.delim{
token::DelimToken::Paren => y2.parse(),
...
38:14 note: ...but borrowed value is only valid for the block at 32:33
TtDelimited(_, y) => {
let mut y2 = box() (*y).clone();
match y2.delim{
token::DelimToken::Paren => y2.parse(),
_ => panic!("not done yet"),
}
Могу ли я работать вокруг этого, используя явные времена жизни? – ragingSloth
Возможно! Это намного сложнее ответить, не видя больше вашего кода, но я попытаюсь добавить редактирование с некоторыми грубыми эскизами. – Shepmaster