此代码有效,但我想显式声明索引范围的类型max
.但是,uX
或者iX
,当X = 8时,16或32给出编译错误.什么是正确的类型?
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]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Fra*_*gné 10
编译器给你一个关于这个的说明:
= note: slice indices are of type `usize`
Run Code Online (Sandbox Code Playgroud)
您必须使用a索引切片usize
.usize
是一个无符号整数类型,与指针大小相同,可以表示内存偏移量或内存中对象的大小.在32位系统上,它是一个32位整数,在64位系统上,它是一个64位整数.声明你的索引变量,usize
除非你真的有很多,在这种情况下,你可以使用x as usize
它们转换为usize
.
当你省略类型注释时,Rust推断你的整数文字必须是类型的,usize
因为切片实现Index<usize>
而不是Index<i32>
或Index<any other integral type>
.
归档时间: |
|
查看次数: |
4404 次 |
最近记录: |