변경 가능한 인수가 함수 인수로 전달되면 borrow checker는 참조를 보유하지 않고 값을 복제 할 때도 인수가 다른 인수를 생성하는 데 사용되지 않도록합니다.Rust에서 체커와 함수 인자를 빌려주 는가, 정확하고 열정적인가?
함수 외부에 변수를 할당하는 것은 항상 옵션입니다. 논리적으로 볼 때 이는 열심히 보며 빌려가는 사람이 고려할 수 있습니다.
의도 한대로 작동합니까 아니면 해결해야 할 것이 있습니까?
--> src/main.rs:14:21
|
14 | some_fn(&mut v, v.some_other + 1);
| - ^^^^^^^^^^^^ use of borrowed `v`
| |
| borrow of `v` occurs here
참조 : playpen
#[derive(Debug)]
struct SomeTest {
pub some_value: f64,
pub some_other: i64,
}
fn some_fn(var: &mut SomeTest, other: i64) {
println!("{:?}, {}", var, other);
}
fn main() {
let mut v = SomeTest { some_value: 1.0, some_other: 2 };
some_fn(&mut v, v.some_other + 1);
// However this works!
/*
{
let x = v.some_other + 1;
some_fn(&mut v, x);
}
*/
}
이 오류를 제공합니다.
[1]
는 : 일회성 할당 때때로 가독성을 향상 않더라도, 인수를 사용하도록 강제 함수 호출을 유발, 이름 공간을 오염 일회용 변수를 방지하기 위해 범위의 사용을 장려하고 그 그렇지 않은 것 하나의 라인이 될 것입니다 - 중괄호와 변수를 정의하고 있습니다 ... 필요하다면 빌리 체커가 지원할 수있는 것과 같이 특히 가능할 때 이것을 피하고 싶습니다.
이전에 답변을 받았지만 중복 된 것을 찾을 수 없습니다. 당신이 그것을 발견하면, 알려주고 그것을 닫을 것입니다. – Shepmaster
와우, 나는 매우 비슷한 문제를 발견했습니다. 'vec.drain (vec.len() - 1 ..)'은 허용되지 않는 반면,'let vlen = vec.len(); vec.drain (vlen - 1 ..)'이 잘 컴파일됩니다. 해결 방법은 사소한 일이지만, 실제로는 이전의 것을 거의 후자와 같은 것으로 상상할 수 있으므로 잘못 생각합니다. 근본 원인이 같다고 가정합니다. – user4815162342
@ user4815162342 예. – Shepmaster