【发布时间】:2019-06-26 12:57:36
【问题描述】:
我正在尝试实现一个常用的模式——在下一个循环迭代中使用上一个循环迭代的结果。例如,要实现分页,需要给出上一页最后一个值的 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(),
})
}
但是,我不确定如何真正从循环中获取价值。目前,编译器错误是temporary value dropped while borrowed(&r.str.to_owned()),虽然我做了很多其他尝试,但都没有成功。
我发现真正让它工作的唯一方法是创建某种本地 tmp_str 变量并进行如下修改:
match current {
Some(r) => {
tmp_str.clone_from(&r.str);
last = Some(&tmp_str);
}
None => {
last = None;
}
}
但这并不像它应该做的那样。
【问题讨论】:
标签: loops rust borrow-checker