我无法编译我的基本Rust程序:
fn main() {
let nums = [1, 2];
let noms = [ "Sergey", "Dmitriy", "Ivan" ];
for num in nums.iter() {
println!("{} says hello", noms[num-1]);
}
}
编译时出现此错误:
Compiling hello_world v0.0.1 (file:///home/igor/rust/projects/hello_world)
src/main.rs:23:61: 23:72 error: the trait `core::ops::Index<i32>` is not implemented for the type `[&str]` [E0277]
src/main.rs:23 println!("{} says hello", noms[num-1]);
如果我进行明确的类型转换,它会起作用,但我不确定 它是正确的方式:
println!("{} says hello", noms[num-1 as usize]);
在这种情况下访问数组元素的正确方法是什么?
关于GitHub的相关讨论,Reddit:
答案 0 :(得分:3)
您可以使用类型注释来确保数组中的数字具有正确的类型:
fn main() {
let nums = [1us, 2]; // note the us suffix
let noms = [ "Sergey", "Dmitriy", "Ivan" ];
for num in nums.iter() {
println!("{} says hello", noms[num-1]);
}
}
这样,您的数组包含usize
类型的数字,而不是i32
s
一般情况下,如果您不明确数字文字的类型,并且类型推断无法确定类型应该是什么类型,则默认为i32
,这可能不是你想要的。