2. 原生类型

发布时间 2023-04-11 15:26:51作者: ImreW

2.2. 元组

题目1

在上面的例子中给 Matrix 结构体 加上 fmt::Display trait,这样当你从 Debug 格式化 {:?} 切换到 Display 格式化 {} 时,会得到如下的输出:

( 1.1 1.2 )
( 2.1 2.2 )

解答1

// 为了使用 `{}` 标记,必须手动为类型实现 `fmt::Display` trait。
impl fmt::Display for Matrix {
    // 这个 trait 要求 `fmt` 使用与下面的函数完全一致的函数签名
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        // 仅将 self 的第一个元素写入到给定的输出流 `f`。返回 `fmt:Result`,此
        // 结果表明操作成功或失败。注意 `write!` 的用法和 `println!` 很相似。
        write!(f, "( {},{} )\n( {},{} )", self.0,self.1,self.2,self.3)
    }
}

题目2

以 reverse 函数作为样板,写一个 transpose 函数,它可以接受一个 Matrix 作为参数,并返回一个右上 - 左下对角线上的两元素交换后的 Matrix。

解答2

// 元组可以充当函数的参数和返回值
fn transpose(mut m:Matrix) -> Matrix {
    // 可以使用 `let` 把一个元组的成员绑定到一些变量
    let temp=m.1;
    m.1=m.2;
    m.2=temp;
    m
}