MST
星途 面试题库

面试题:Rust结构体其他初始化方式之高级题

假设有两个结构体`Rectangle { width: u32, height: u32 }`和`Square { side: u32 }`,请实现一种初始化方式,使得可以用`Square`结构体实例初始化`Rectangle`结构体实例,且`Rectangle`的`width`和`height`都等于`Square`的`side`值。同时要考虑代码的简洁性和可维护性,写出完整代码及相关逻辑说明。
31.7万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
// 定义Rectangle结构体
struct Rectangle {
    width: u32,
    height: u32,
}

// 定义Square结构体
struct Square {
    side: u32,
}

// 为Rectangle实现从Square初始化的方式
impl From<Square> for Rectangle {
    fn from(square: Square) -> Self {
        Rectangle {
            width: square.side,
            height: square.side,
        }
    }
}

fn main() {
    let square = Square { side: 5 };
    let rectangle: Rectangle = Rectangle::from(square);
    println!("Rectangle width: {}, height: {}", rectangle.width, rectangle.height);
}

逻辑说明

  1. 结构体定义:首先定义了RectangleSquare两个结构体,分别包含相应的字段。
  2. From trait 实现:通过为Rectangle实现From<Square> trait,定义了从SquareRectangle的转换逻辑。在from方法中,创建一个新的Rectangle实例,其widthheight都设置为Square实例的side值。
  3. 主函数:在main函数中,创建一个Square实例,并使用Rectangle::from方法将其转换为Rectangle实例,然后打印出Rectanglewidthheight,验证转换是否成功。这种方式代码简洁,并且通过实现标准库中的From trait,提高了代码的可维护性和与其他 Rust 代码的兼容性。