2016-07-15 56 views
2

我正在嘗試編寫一個循環迭代多次,它也更新Rust中的變量。重新綁定變量不工作在for循環內

fn get_next(input: &[u8]) -> (u8, &[u8]) { 
    (input[0], &input[1..]) 
} 

fn main() { 
    let slice: &[u8] = &vec![1, 2, 3, 4]; 
    for _ in 0..4 { 
     let (mynum, slice) = get_next(slice); 
     println!("Here's mynum {} slice {:?}", mynum, slice); 
    } 
} 

代碼是關於Rust Playground

這是輸出:

Here's mynum 1 slice [2, 3, 4] 
Here's mynum 1 slice [2, 3, 4] 
Here's mynum 1 slice [2, 3, 4] 
Here's mynum 1 slice [2, 3, 4] 

我期望slice變量每次都指向下一子切片改變。我怎樣才能讓slice變量得到更新?

這是一個最小的例子,如果我真的在迭代u8的分片,我會以不同的方式做。

+0

暫時地,「重新綁定變量」正在工作*就好了*。您將名稱'mynum'和'slice'綁定爲全新的值。^_^ – Shepmaster

+0

又名:* binding *(賦予值一個名稱)和*賦值*(用另一個值覆蓋一個值)之間有區別。 'let'語法用於* binding *。 –

回答

6

您正在定義一個影響外層的新變量。也許:

let mut slice: &[u8] = &vec![1, 2, 3, 4]; 
for _ in 0..4 { 
    let (mynum, slice_) = get_next(slice); 
    slice = slice_; 
    println!("Here's mynum {} slice {:?}", mynum, slice); 
} 
+1

由於我們三個人基本上都是一樣的,而且你先來了,我只是安靜地收回我自己的答案。 :P –