Rust 为什么借阅检查者认为内容的寿命不够长?
我还是个新手,我有这个功能: 编辑:据我所知,这是一个更新版本的函数,具有相同的问题Rust 为什么借阅检查者认为内容的寿命不够长?,rust,lifetime,borrow-checker,borrowing,Rust,Lifetime,Borrow Checker,Borrowing,我还是个新手,我有这个功能: 编辑:据我所知,这是一个更新版本的函数,具有相同的问题 pub fn new\u from\u file\u path(path:&str)->解析器{ 让path_buf:PathBuf=PathBuf::from(path); 让绝对路径:PathBuf=std::fs::规范化(path_buf).unwrap(); let data:String=std::fs::read_to_String(绝对路径).unwrap(); 让clone=data.clon
pub fn new\u from\u file\u path(path:&str)->解析器{
让path_buf:PathBuf=PathBuf::from(path);
让绝对路径:PathBuf=std::fs::规范化(path_buf).unwrap();
let data:String=std::fs::read_to_String(绝对路径).unwrap();
让clone=data.clone();
让s_切片:&str=&clone[…];
返回解析器::从_字符串_数据(s_切片)中新建_;
}
下面是新的_from_string_data()函数的实现
pub fn new\u from\u string\u data(数据:&str)->解析器{
让parser=parser::new(data.chars());
返回解析器;
}
这是解析器的结构定义:
pub结构分析器,
}
这是我收到的错误信息的屏幕截图
如果需要任何帮助,请告知我是否需要更多信息。
new\u from\u string\u data
函数返回一个与输入参数data
具有相同生存期的解析器
在new\u from\u file\u path
的情况下,data
是s\u slice
,它是函数new\u from\u file\u path
拥有的字符串clone
的一部分。因此,返回的解析器
将引用克隆
,当从函数new\u from\u file\u路径
str::chars()
返回需要显式生存期的迭代器结构(可能我自己还没有阅读完整的结构定义)引用传递到chars()的数据(pub-struct-Chars-parserc你能添加你试图构建这段代码时得到的错误消息吗?如果我不得不猜测的话,我会说它是错误的,因为内容的生存期不是静态的在标记器之前结束。从技术上说不可能确定,因为这个问题不包含一个,但我可以n实际上保证标记器
正在存储对内容的引用
,因此当内容
在函数末尾被删除时,标记器
将失效。你不能仅仅通过声称某个东西是'静态
,它实际上必须是'静态
ndChars
不是。你可以研究关于同一基本问题的另一个观点。@Locke看到修改后的问题我猜你是在返回对堆栈数据的引用,尝试将数据传递给解析器,使其接受字符串,这样它将接受数据