我有一些正在处理的代码。这是一个小辅助函数,应该返回一个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>>;
的寿命out
is not 'a
, since out
在函数结束时被销毁。 Rust 不允许您返回对它的引用(它将允许访问已释放的内存!)。
尝试将您的功能更改为以下内容:
fn take_symbol<'a>(ch: &'a str, current: &'a mut String) -> TokenList<'a> {
let out = TokenList::<'a>::new();
out.push(current.as_str());
out.push(ch);
*current = String::new();
out
}
这样您就可以传递所有权out
给调用者,它会存活足够长的时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)