小编ral*_*alh的帖子

尝试在循环中更新 Option<&str> 时获取“借用时丢失的临时值”

我正在尝试实现一个常用的模式 - 在下一个循环迭代中使用上一个循环迭代的结果。例如,要实现分页,您需要给出上一页上最​​后一个值的 id。

struct Result {
    str: String,
}    

fn main() {
    let times = 10;
    let mut last: Option<&str> = None;

    for i in 0..times {
        let current = do_something(last);
        last = match current {
            Some(r) => Some(&r.str.to_owned()),
            None => None,
        };
    }
}

fn do_something(o: Option<&str>) -> Option<Result> {
    Some(Result {
        str: "whatever string".to_string(),
    })
}
Run Code Online (Sandbox Code Playgroud)

但是,我不确定如何真正从循环中获取值。目前,编译器错误是temporary value dropped while borrowed(at &r.str.to_owned()),虽然我做了很多其他尝试,但都无济于事。

我发现真正让它工作的唯一方法是创建某种局部tmp_str变量并像这样进行黑客攻击:

match current {
    Some(r) => {
        tmp_str.clone_from(&r.str);
        last = …
Run Code Online (Sandbox Code Playgroud)

loops rust borrow-checker

12
推荐指数
1
解决办法
1万
查看次数

标签 统计

borrow-checker ×1

loops ×1

rust ×1