2016-08-04 2 views
2

어떻게 하나가 for ... in 루프는 그것을 반복하는 iterator 빌려? 예를 들어 다음은 Iterator 객체에 &Iterator을 변환 할 수 없기 때문에for 루프는 어떻게 반복자를 빌릴 수 있습니까?

let x = vec![1, 2, 3, 4]; 
let i = x.iter(); 
for a1 in i { break; } // iterate over just one "i" 
for a2 in i { break; } // continue iterating through "i" here 

당신은 단순히위한에 &i을 줄 수 없습니다.

답변

2

당신은 반복자를 빌려 Iterator::by_ref을 사용하고 차용 한 후 그것을 계속 사용할 수있는 것은 종료 :

fn main() { 
    let x = vec![1, 2, 3, 4]; 
    let mut i = x.iter(); 
    for _ in i.by_ref() { break; } // iterate over just one "i" 
    for _ in i.by_ref() { break; } // continue iterating through "i" here 
    assert_eq!(Some(&3), i.next()) 
} 
+0

이가 좋은 대답, b 당신이 (심지어 변경할 수없는) 중첩 된 반복자를 'i'에 갖고 싶다면 그것은 실패합니다. – njaard

2

모든 반복자는 반복자를 진행하고 반환하는 next() 기능이 Option<Self::Item> (즉, 그들은 반환하거나 None 또는 이상 반복하고 어떤 유형의 값을 포함하는 Some. 수동으로 증가하는이 함수를 직접 호출 할 수 있습니다 .이 같은 소리 반복자 당신이 원하는 그러나 여러 번,이 경우 문제를 해결할

관련 문제