rust 所有权如何解决E0515错误,因必须从for中处理暂无其他替代方法?

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
}
阅读 2.3k
2 个回答
✓ 已被采纳新手上路,请多包涵

通过调整函数所有权签名标识修复实现:
参考如 19bc0614359f

chars -> String -> &str

    • cols 类型设置为String
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进