【发布时间】:2015-04-20 03:08:10
【问题描述】:
我有一个或多或少看起来像这样的程序
struct Test<T> {
vec: Vec<T>
}
impl<T> Test<T> {
fn get_first(&self) -> &T {
&self.vec[0]
}
fn do_something_with_x(&self, x: T) {
// Irrelevant
}
}
fn main() {
let t = Test { vec: vec![1i32, 2, 3] };
let x = t.get_first();
t.do_something_with_x(*x);
}
基本上,我们在结构Test 上调用一个借用一些值的方法。然后我们在同一个结构上调用另一个方法,传递之前获得的值。
这个例子工作得很好。现在,当我们将main 的内容设为泛型时,它就不再起作用了。
fn generic_main<T>(t: Test<T>) {
let x = t.get_first();
t.do_something_with_x(*x);
}
然后我得到以下错误:
错误:无法移出借来的内容
src/main.rs:14 让 raw_x = *x;
我不完全确定为什么会这样。有人可以向我解释为什么在调用get_first 时不借用Test<i32> 而Test<T> 是借用吗?
【问题讨论】: