【发布时间】:2017-01-19 14:55:17
【问题描述】:
我想进入一个带有变量n 的循环,该变量被函数借用。在每一步,n 都取一个新值;退出循环时,在其他变量的帮助下,工作完成,n 将永远再次使用。
如果我不使用引用,我有这样的东西:
fn test(n: Thing) -> usize {
// stuff
let mut n = n;
for i in 1..10 {
let (q, m) = n.do_something(...);
n = m;
// stuff with x
}
x
}
x 是使用q 和m 进行一些计算的结果,但它是usize 类型,我在这部分代码中没有遇到任何问题。我没有测试这段代码,但这就是想法。我可以编写这样的代码。
因为我想通过参考来做;我试着写:
fn test(n: &Thing) -> usize {
// stuff
let mut n = n;
for i in 1..10 {
let (q, m) = (*n).do_something(...);
n = &m;
// stuff with x
}
x
}
现在代码将无法编译,因为m 的生命周期比n 短。我试图通过做一些棘手的事情或克隆东西来使它工作,但这不是正确的方法。在 C 语言中,代码可以工作,因为我们不关心退出循环时 n 指向的内容,因为在循环之后不使用 n。我完全理解这是 Rust 和 C 不同的地方,但我很确定在 Rust 中存在一种干净的方法。
认为我的问题非常笼统;我不是要求针对特定问题的一些 ad-hoc 解决方案。
【问题讨论】:
标签: rust lifetime borrow-checker