"인덱싱 된 콘텐츠에서 이동할 수 없음"이란 무엇을 의미합니까?
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
컴파일되지만 무슨 일이 일어나고 있는지 확인하지 않습니다. 누군가 "인덱싱 된 콘텐츠"가 무엇을 의미하는지 설명 할 수 있습니까?
인덱스 연산자 ( []
) 를 사용하면 인덱스 위치에서 실제 객체를 얻을 수 있습니다. 참조, 포인터 또는 사본을 얻지 못합니다. 바인딩을 사용하여 해당 객체를 바인딩하려고 시도하기 때문에 let
Rust는 즉시 이동 (또는 Copy
특성이 구현 된 경우 복사)을 시도합니다 .
귀하의 예 env::args()
에서은 String
s 의 반복자이며 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
'programing' 카테고리의 다른 글
MongoDB 'count ()'는 매우 느립니다. (0) | 2021.01.15 |
---|---|
S3 버킷을 EC2 인스턴스에 마운트하고 PHP로 작성하려면 어떻게해야합니까? (0) | 2021.01.15 |
신속한 성능 : map () 및 reduce () 대 for 루프 (0) | 2021.01.15 |
Distributed Lock Service (0) | 2021.01.15 |
C 전처리 기가 먼저 주석을 제거하거나 매크로를 확장합니까? (0) | 2021.01.15 |