rust 所有权如何解决E0515错误,因必须从for中处理暂无其他替代方法
// 获取多次请求
fn find_by_multi_elem<'a>(values: &'a str, tp: &'a DickSearchType) -> Vec<Option<&'a Dk>> {
let mut cols: Vec<Option<&Dk>> = Vec::new();
for v in values.chars() {
cols.push(Dick::find_by_elem(v.to_string().as_str(), tp));
// ------------- temporary value created here
}
cols
}
// E0515
// error[E0515]: cannot return value referencing temporary value
经修改测试,非调用函数的问题。正常编译
// 获取多次请求
fn find_by_multi_elem<'a>(values: &'a str, tp: &'a DickSearchType) -> Vec<Option<&'a Dk>> {
let mut cols: Vec<Option<&Dk>> = Vec::new();
for v in values.chars() {
// 使用 char 调用函数,返回结果无异常
let vs = &v.to_string();
let dk = Dick::find_by_elem(vs.as_str(), tp);
println!("{}", dk.unwrap());
// 定值测试
let dk = Dick::find_by_elem("华", tp);
if !dk.is_none(){
cols.push(Some(&dk.unwrap()));
}
//cols.push(Dick::find_by_elem(v.to_string().as_str(), tp));
}
cols
}
通过调整函数所有权签名标识修复实现:
参考如 19bc0614359f