2016-10-25 10 views
1

このコードは機能しますが、インデックス範囲maxのタイプを明示的に宣言したいと思います。ただし、uXまたはiX(X = 8,16または32)はコンパイルエラーを示します。正しいタイプは何ですか?あなたはusizeとインデックスのスライスをしなければならないアレイインデックスに使用する正しいタイプは何ですか?

= note: slice indices are of type `usize` 

fn main() { 
    let mut arr2: [[f64; 3]; 3] = [[0.0; 3]; 3]; 
    let pi: f64 = 3.1415926535; 

    let max = 3; // let max: i16 e.g. is wrong 

    for ii in 0..max { 
     for jj in 0..3 { 
      let i = ii as f64; 
      let j = jj as f64; 
      arr2[ii][jj] = ((i + j) * pi * 41.0).sqrt().sin(); 
      println!("arr2[{}][{}] is {}", ii, jj, arr2[ii][jj]); 
     } 
    } 
} 
+0

私はあなたに何を求めているのか混乱しています。特定の整数型の配列にインデックスを付けることができないのはなぜですか?あるいは、あなたが「usize」要件が存在するかどうか尋ねていますか? –

+0

私はusustを気づいていません、私の最初の試みはRustです。私はコードをコンパイルして実行できるようにmaxにappyする正しいタイプを知りたい。 –

答えて

4

コンパイラはあなたにこのことについて注意を与えます。 usizeは、ポインタと同じサイズを持つ符号なし整数型であり、メモリーオフセットまたはメモリ内のオブジェクトのサイズを表すことができます。 32ビットシステムでは32ビット整数で、64ビットシステムでは64ビット整数です。実際にたくさんある場合を除き、インデックス変数をusizeと宣言してください。その場合は、x as usizeを使用してusizeにキャストしてください。

あなたは型注釈を残して、錆がslicesIndex<usize>ないIndex<i32>またはIndex<any other integral type>を実装しているので、あなたの整数リテラルの型usizeでなければならないことを推測します。

+0

ありがとうございました。EDITのフォローアップの質問にもお答えできますか? –

+4

[新しい質問の投稿で新しい質問をしてください](http://stackoverflow.com/questions/ask) –

関連する問題