(또한 here)이 코드를 감안할 때 :불변의 필드와 평생 불일치
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
가없는 것 같습니다.
, 그것은 또한 말, 나에게 lifetime mismatch
을주고 :
일치하지 않는 유형을 '& Vector2'예상하지만 '& Vector2'발견 ... 익명의 수명을 # 1의 블록에 정의 14:41의 블록에서 정의 된 익명의 수명 # 2는 반드시 오래 남아 있지 않습니다.
아무도이 두 가지 문제를 해결할 방법을 알고 있습니까?
I 녹이 사용하지 않았지만 불변이라면 변형 시키면 안됩니다. add 메서드에서 새 Vector2를 만들고 대신 반환하십시오. – Mike