如何引用2d数组



Im正在尝试将新初始化的2d字符数组传递到结构;它说类型不匹配,我不知道如何正确地做到这一点;

代码和错误消息屏幕截图

struct Entity<'a> {
dimensions: Vec2,
sprite: &'a mut[&'a mut [char]]
}
impl Entity {
fn new<'a>() -> Self {
let mut sp = [[' '; 3]; 4];
for y in 0..sp.len() {
for x in 0..sp[y].len() {
sp[y][x] = '$';
}
}

return Entity{dimensions: Vec2::xy(3, 4), sprite: &mut sp }
}
}

我认为有几件事正在发生。

1.)&'a mut[&'a mut [char]]引用包含字符的可变切片的可变切片。您正在构建的是一个固定的字符数组矩阵,然后尝试返回对该矩阵的可变引用。这些类型不能互换。

2.)您正试图返回对在new中创建的数据的引用,由于局部变量的生存期,这将无法正常工作。

另一种选择可能是将结构定义为包含固定大小的数组矩阵。像这样:

struct Entity {
sprite: [[char; 3]; 4]
}
impl Entity {
fn new() -> Self {

let mut sp = [[' '; 3]; 4];
for y in 0..sp.len() {
for x in 0..sp[y].len() {
sp[y][x] = '$';
}
}
return Entity{sprite: sp }
}
}

或者,您甚至可以使用不同大小的const泛型:

struct Entity<const W: usize, const H: usize> {
sprite: [[char; W]; H]
}
impl<const W: usize, const H: usize> Entity<W, H> {
fn new() -> Self {

let mut sp = [[' '; W]; H];
for y in 0..sp.len() {
for x in 0..sp[y].len() {
sp[y][x] = '$';
}
}

return Entity{sprite: sp }
}
}

如果在编译时无法知道精灵的大小,则需要使用动态大小的数据结构(如Vec)来定义它。即Vec<Vec<char>>

相关内容

  • 没有找到相关文章

最新更新