MST
星途 面试题库

面试题:Rust中From/Into trait在类型转换中的基本应用

请解释Rust中From和Into trait的作用,并通过代码示例展示如何使用它们将一个自定义结构体类型转换为另一个自定义结构体类型。
10.7万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

From 和 Into trait 的作用

  1. From traitFrom trait 定义了一个从一种类型转换为另一种类型的方式。它只有一个方法 from,通常用于定义一种 “自然” 的转换方式,即从 TU 的转换。如果类型 U 实现了 From<T>,那么就可以使用 U::from(t) 的方式将 T 类型的值 t 转换为 U 类型。
  2. Into traitInto trait 依赖于 From trait。如果类型 U 实现了 From<T>,那么 T 自动实现了 Into<U>。它主要提供了一种反向的转换便利性,即可以使用 t.into()T 类型的值 t 转换为 U 类型,这里编译器会去查找 U::from(t) 的实现。

代码示例

// 定义源结构体
struct SourceStruct {
    value: i32,
}

// 定义目标结构体
struct TargetStruct {
    new_value: i32,
}

// 为 TargetStruct 实现 From<SourceStruct>
impl From<SourceStruct> for TargetStruct {
    fn from(source: SourceStruct) -> Self {
        TargetStruct {
            new_value: source.value * 2,
        }
    }
}

fn main() {
    let source = SourceStruct { value: 5 };
    // 使用 From trait 的方式进行转换
    let target1 = TargetStruct::from(source);
    println!("Using From: new_value = {}", target1.new_value);

    let source2 = SourceStruct { value: 10 };
    // 使用 Into trait 的方式进行转换
    let target2: TargetStruct = source2.into();
    println!("Using Into: new_value = {}", target2.new_value);
}

在上述代码中:

  • 首先定义了 SourceStructTargetStruct 两个自定义结构体。
  • TargetStruct 实现了 From<SourceStruct>,在 from 方法中,将 SourceStruct 中的 value 乘以 2 赋值给 TargetStructnew_value
  • main 函数中,展示了分别使用 From trait 的 TargetStruct::from(source)Into trait 的 source.into() 两种方式将 SourceStruct 转换为 TargetStruct