鉴于此代码(也在此处):
struct Vector2 {
x: int,
y: int
}
impl Vector2 {
pub fn new(xs: int, ys: int) -> Vector2 {
Vector2 {
x: xs,
y: ys
}
}
fn add(&self, otr: Vector2) -> &Vector2 {
self.x += otr.x; // cannot assign to immutable field (line 15)
self.y += otr.y; // cannot assign to immutable field (line 16)
return self; // lifetime mismatch (line 17)
}
}
fn main() {
let mut vec1 = Vector2::new(42, 12);
println(fmt!("vec1 = [x: %?, y: %?]", vec1.x, vec1.y));
let vec2 = Vector2::new(13, 34);
println(fmt!("vec2 = [x: %?, y: %?]", vec2.x, vec2.y));
let vec3 = vec1.add(vec2);
println(fmt!("vec1 + vec2 = [x: %?, y: %?]", vec3.x, vec3.y))
}
我遇到了第 15-17 行的问题。
对于第 15 行和第 16 行,有人可以解释更改这两个变量的最佳方法是什么吗?看来我要么没有使用self
正确,要么我错过了mut
某个地方。
对于第 17 行,它给了我一个lifetime mismatch
,还说:
不匹配的类型:预期 '&Vector2' 但找到了 '&Vector2'...在 14:41 在块上定义的匿名生命周期 #1 不一定比在 14:41 在块上定义的匿名生命周期 #2 长。
有谁知道解决这两个问题的任何方法?