将一个 [[&u32; 4]; 4] 格式化输出,主要是想办法使用 join 函数。在有 TS/JS 的基础下,我不太容易理解为什么需要搞这么麻烦。不过后面仔细看了代码后,就明白了。

    1. join 函数是放在 &[String] 类型下面的方法
    2. 由于 rust 是强类型,所以 &[u32] 无法直接使用 join 方法,需要进行转换才行
    1. type Matrix = [[u32; 4]; 4];
    2. pub struct Observable {
    3. pub payload: Matrix,
    4. ...
    5. }
    6. impl fmt::Debug for Observable {
    7. fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    8. let x = self.payload;
    9. // 迭代第一层,由于是 &u32 类型,所以没有办法直接使用 join 函数
    10. // 需要同 map 转成 Vec<String> 类型才行。
    11. // 转成 iter 后,需要使用 collect 再次变成 vec 才行
    12. let print_str = x.iter().map(|col_arr| {
    13. col_arr.iter().map(|v| v.to_string()).collect::<Vec<String>>().join(",")
    14. }).collect::<Vec<String>>().join("\n");
    15. write!( f, "{}", print_str)
    16. }
    17. }