我有一些我正在与之抗争的代码。这是一个应该返回的辅助函数 Vec<&str>
到调用函数。不过,我似乎无法让生命恢复正常。
这是代码片段:
fn take_symbol<'a>(ch: &'a str, current: &'a mut String) -> &'a mut TokenList<'a> {
let out = TokenList::<'a>::new();
out.push(current.as_str());
out.push(ch);
*current = String::new();
&mut out
}
编译器告诉我: error: 'out' does not live long enough
并且引用必须在生命周期内有效 'a
,但它看起来像我的定义 'a
。
我也尝试将其更改为:
let out = &mut TokenList::<'a>::new();
这不会改变任何错误消息。要么:
let out = &'a mut TokenList::<'a>::new();
编译器完全不喜欢它。
我该如何定义 out
有一辈子的 'a
?
有关更多详细信息,请参阅我对TokenList的定义:
pub type Token<'a> = &'a str;
pub type TokenList<'a> = Vec<Token<'a>>;