이 책은 정확히 for 루프가 v1_iter의 소유권을 가지고 가고 뒤에서는 가변 만든
을 말한다, 하나는 더 간단한 예를 만들 수 있습니다
let v = vec![1,2,3];
let mut x = v;
x.push(0);
주를이 v
및 x
은 별도의 변수 바인딩입니다. 변수 v
이 3 요소 벡터를 보유하고있는 한 변수의 계약은 벡터가 변형되지 않는다는 것입니다. 그러나 벡터는 x
으로 이동되었으므로 변경 가능성이 허용됩니다. 함수 호출에도 동일하게 적용됩니다.
fn foo(mut x: Vec<i32>) {
x.push(0);
}
let v = vec![1,2,3];
foo(v);
변수 중 하나만 수명주기의 어느 지점에서나 벡터를 소유하기 때문에 안전합니다. v
을 x
으로 옮기면 v
을 더 이상 사용할 수 없습니다. 마찬가지로 코드에서 v1_iter
은 for 루프 뒤에 더 이상 사용할 수 없습니다.
하지만 변경할 수있는 변수를 변경할 수 있습니까?
값이 mut
으로 선언 된 새 변수로 이동 되었기 때문에 두 조각이 작동합니다. 그러나 일단 변수가 불변 (또는 변경 가능)으로 선언되면 해당 변수는 모든 수명 동안 유지되며 변경할 수 없습니다. 따라서 대답은 '아니요'이지만 소유권 의미론을 사용하면 서로 다른 변경 가능성 보장이있는 변수간에 값을 이동할 수 있습니다.