rust 二维数组类型推导错误:rustc E0282
我想通过下标访问Vec<Vec<Point>>
这样的二维数组map
,但是编译器报错了意思是无法推导类型?
我想不通,map[x][y]
的类型不就是Point
吗?
这是报错内容
error[E0282]: type annotations needed
--> src/main.rs:34:15
|
34 | match map[x][y] {
| ^^^^^^ cannot infer type
|
= note: type must be known at this point
以下是源码,删除了无关紧要的内容
use rand::prelude::*;
#[derive(Debug, Clone, Copy)]
enum Point {
Landmine,
Num(u8),
}
fn init_map(height: u8, weight: u8, mines: u8) {
let mut rng = thread_rng();
let mut map: Vec<Vec<Point>> = vec![vec![Point::Num(0); weight.into()]; height.into()];
// let mut map: [[Point; 30]; 16] = [[Point::Num(0); 30]; 16];
let mut num = 0;
while num < mines {
let x = rng.gen_range(0..height).into();
let y = rng.gen_range(0..weight).into();
match map[x][y] {
Point::Landmine => {}
Point::Num(_) => {}
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在 error index 里有这么一句话:
尝试对程序中做出以下修改 play:
我们发现报错指向的位置变化了:
因此,该段程序的报错是因为
rng.get_range
的返回值需要指定泛型。给x
,y
加上类型标注,或者通过 turbo fish 语法 指定返回值的类型
rng.gen_range::<usize>::(0..height)
,均可修复这个问题。修复play