如何解决为什么借阅检查器认为内容的寿命不足?
我对Rust还是很陌生,并且具有以下功能:
编辑:据我所知,这是该函数的较新版本
pub fn new_from_file_path(path: &str) -> Parser {
let path_buf: PathBuf = PathBuf::from(path);
let absolute_path: PathBuf = std::fs::canonicalize(path_buf).unwrap();
let data: String = std::fs::read_to_string(absolute_path).unwrap();
let clone = data.clone();
let s_slice: &str = &clone[..];
return Parser::new_from_string_data(s_slice);
}
这是new_from_string_data()函数的实现
pub fn new_from_string_data(data: &str) -> Parser {
let parser = Parser::new(data.chars());
return parser;
}
这是解析器的结构定义:
pub struct Parser<'a> {
tokenizer: Tokenizer<'a>,}
这是我收到的错误消息的屏幕截图
解决方法
new_from_string_data
函数返回一个Parser
,其生存期与其输入参数data
相同。
对于new_from_file_path
,data
是s_slice
,它是函数clone
所拥有的字符串new_from_file_path
的一部分。因此,返回的Parser
将引用clone
,而该new_from_file_path
从函数.navigationBarTitle("",displayMode: .inline)
返回时会被破坏
str::chars()
返回一个迭代器结构,该结构需要显式的生存期,因为它(可能是我自己尚未阅读完整的结构定义)引用传递给chars()
(pub struct Chars<'a> { /* fields omitted */ }
)的数据,就像您的Parser
结构一样,您正在语句new_from_file_path
的{{1}}内部生成引用的变量。
我建议仅向函数标头添加一个生命周期批注,以便其内容如下:
let clone = data.clone();
这不会使函数调用复杂化,并告诉编译器返回的pub fn new_from_file_path<'a>(path: &'a str) -> Parser<'a> {...}
结构及其引用应与传递给函数的数据具有相同的生存期。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。