2016-07-15 10 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] 

Iはslice変数は、次のサブスライスをポイントするたびに変更することが期待されます。 slice変数を更新するにはどうすればよいですか?

これは最小の例です。u8をスライスで実際に繰り返していた場合、私は別のやり方をします。

+0

「変数を再バインドする」はうまく動作しています。新しい値に 'mynum'と' slice'という名前をバインドしています。^_^ – Shepmaster

+0

AKA:*バインディング*(値に名前を付ける)と*を割り当てる(別の値で上書きする)の間には違いがあります。 '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 –

関連する問題