我有一个2D数组,我想用一个函数来改变它,我还不知道向量,但是因为数组是固定大小的,所以我不需要向量,我想给予这个函数一个数组切片的数组切片,比如fn my_func (arr: &mut [&mut [char]]) {...}
,但是我不知道如何从我的int main函数中调用它。
这是我一直在研究的一个例子。
fn main() {
let mut map = [['-'; 3]; 3];
for row in map {
for col in row {
print!("{} ", col);
}
println!("");
}
println!("Changing...");
put_plus(???);
for row in map {
for col in row {
print!("{} ", col);
}
println!("");
}
}
fn put_plus(map: &mut [&mut [char]]) {
map[map.len() - 1][map[map.len() - 1].len() - 2] = '+';
}
我期望的输出是:
- - -
- - -
- - -
Changing...
- - -
- - -
- + -
是否有一个表达式可以将[[char; 3]; 3]
转换为[[char]]
,这样我就可以用这个表达式代替???
,并且一切正常?
1条答案
按热度按时间kx5bkwkv1#
下面是一个适用于所有尺寸的加号函数:
正如在注解中指出的,你只需要一个“外部”结构体上的可变引用。在Rust中,你不在“元素”级别控制可变性。相反,容器的可变性扩展到该容器中的所有元素。你不能有,例如,一个可变向量包含不变向量或一个可变数组包含不变数组。
因此,只要将一个
&mut
放到数组的“外部”,就意味着数组中的所有内容(包括内部数组以及这些内部数组中包含的值)都是可变的。编辑:我的
put_plus
版本只适用于方阵,正如评论者@cafce25所指出的,可以去掉外部的:COUNT
,这样会使它更通用