programing

"인덱싱 된 콘텐츠에서 이동할 수 없음"이란 무엇을 의미합니까?

sourcetip 2021. 1. 15. 20:25
반응형

"인덱싱 된 콘텐츠에서 이동할 수 없음"이란 무엇을 의미합니까?


Rust를 가지고 놀고 있고 , 다음 코드로 첫 번째 명령 줄 인수에 액세스하려고합니다.

use std::env;

fn main() {
    let args: Vec<_> = env::args().collect();
    let dir = args[1];
}

그리고이 오류가 발생합니다.

error[E0507]: cannot move out of indexed content
 --> src/main.rs:5:15
  |
5 |     let dir = args[1];
  |         ---   ^^^^^^^ cannot move out of indexed content
  |         |
  |         hint: to prevent move, use `ref dir` or `ref mut dir`

으로 변경하면 let ref dir컴파일되지만 무슨 일이 일어나고 있는지 확인하지 않습니다. 누군가 "인덱싱 된 콘텐츠"가 무엇을 의미하는지 설명 할 수 있습니까?


인덱스 연산자 ( []) 를 사용하면 인덱스 위치에서 실제 객체를 얻을 수 있습니다. 참조, 포인터 또는 사본을 얻지 못합니다. 바인딩을 사용하여 해당 객체를 바인딩하려고 시도하기 때문에 letRust는 즉시 이동 (또는 Copy특성이 구현 된 경우 복사)을 시도합니다 .

귀하의 예 env::args()에서은 Strings 의 반복자이며 Vec<String>. 이것은 소유 된 문자열의 소유 된 벡터이며 소유 된 문자열은 자동으로 복사 할 수 없습니다.

let ref바인딩을 사용할 수 있지만보다 관용적 인 대안은 인덱스 된 개체에 대한 참조를 가져 오는 것입니다 ( &기호에 주의 ).

use std::env;

fn main() {
    let args: Vec<_> = env::args().collect();
    let ref dir = &args[1];
    //            ^
}

묵시적으로 a 외부로 이동하는 Vec것은 유효하지 않은 상태로 남겨질 수 있으므로 허용되지 않습니다. 한 요소는 외부로 이동하고 다른 요소는 그렇지 않습니다. mutable이 있으면 단일 값을 가져 오는 Vec것과 같은 방법을 사용할 수 있습니다 Vec::remove.

use std::env;

fn main() {
    let mut args: Vec<_> = env::args().collect();
    let dir = args.remove(1);
}

특정 문제에 대해 다음을 사용할 수도 있습니다 Iterator::nth.

use std::env;

fn main() {
    let dir = env::args().nth(1).expect("Missing argument");
}

참조 URL : https://stackoverflow.com/questions/27904864/what-does-cannot-move-out-of-indexed-content-mean

반응형