我有一段代码,一直在与之斗争。这是一个小助手函数,应该向调用函数返回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>>;