如何将[[char;3];3]转为&mut [&mut [char]]以调用Rust函数?
解决方案
要将固定大小的二维数组 [[char; 3]; 3] 转换为 &mut [&mut [char]] 类型传给 put_plus 函数,你可以按以下步骤调整代码:
1. 修复循环的所有权问题
原代码中 for row in map 会转移数组的所有权,导致后续无法再次访问 map。需改为引用遍历以保留所有权:
// 第一次遍历 for row in &map { for &col in row { print!("{} ", col); } println!(""); } // 修改后的第二次遍历 for row in &map { for &col in row { print!("{} ", col); } println!(""); }
2. 类型转换与函数调用
固定大小数组可隐式转换为切片,你可以手动构造一个包含每行可变切片的数组,再将其转换为 &mut [&mut [char]] 传入函数:
println!("Changing..."); // 构造每行的可变切片数组 let mut rows = [&mut map[0], &mut map[1], &mut map[2]]; // 将数组的可变引用传给函数 put_plus(&mut rows);
完整可运行代码
fn main() { let mut map = [['-'; 3]; 3]; // 第一次遍历(使用引用避免所有权转移) for row in &map { for &col in row { print!("{} ", col); } println!(""); } println!("Changing..."); let mut rows = [&mut map[0], &mut map[1], &mut map[2]]; put_plus(&mut rows); // 第二次遍历 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... - - - - - - - + -
内容的提问来源于stack exchange,提问作者Andrey Voeyko
相关产品推荐
相关产品推荐

