我正在尝试实现一个常用模式 - 在下一次循环迭代中使用上一次循环迭代的结果。例如,实现需要提供上一页最后一个值的分页。
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;
}
}
但那感觉好像不是应该这样做的方式。
error[E0716]
error E0716:temporary value dropped while borrowed (rust),它链接回了这个问题。 - JamesThomasMoon#to_owned
时,这似乎是 Rust 的一个不必要的错误。 - Eric Walker