我有一个程序,大致看起来像这样:
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 let raw_x = *x;
我不完全确定为什么会出现这种情况。有人能解释一下,为什么在调用 get_first
时 Test<i32>
没有被借用,而 Test<T>
却被借用了吗?