将一个 [[&u32; 4]; 4] 格式化输出,主要是想办法使用 join 函数。在有 TS/JS 的基础下,我不太容易理解为什么需要搞这么麻烦。不过后面仔细看了代码后,就明白了。
- join 函数是放在 &[String] 类型下面的方法
- 由于 rust 是强类型,所以 &[u32] 无法直接使用 join 方法,需要进行转换才行
type Matrix = [[u32; 4]; 4];
pub struct Observable {
pub payload: Matrix,
...
}
impl fmt::Debug for Observable {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let x = self.payload;
// 迭代第一层,由于是 &u32 类型,所以没有办法直接使用 join 函数
// 需要同 map 转成 Vec<String> 类型才行。
// 转成 iter 后,需要使用 collect 再次变成 vec 才行
let print_str = x.iter().map(|col_arr| {
col_arr.iter().map(|v| v.to_string()).collect::<Vec<String>>().join(",")
}).collect::<Vec<String>>().join("\n");
write!( f, "{}", print_str)
}
}