定义
注意
两者都会消耗所有权
From
From 特性用于定义类型之间的转换。实现 From<T> 可以让类型从 T 转换而来。
pub trait From<T> {
fn from(T) -> Self;
fn try_from(value: T) -> Result<Self, Self::Error>;
}Into
Into 是 From 的反向操作。如果实现了 From<T>,Rust 会自动提供 Into 的实现。
pub trait Into<T> {
fn into(self) -> T;
fn try_into(self) -> Result<T, Self::Error>;
}示例
use std::convert::From;
struct Number {
value: i32,
}
// 只需实现 From 就自动获得 Into
impl From<i32> for Number {
fn from(item: i32) -> Self {
Number { value: item }
}
}
fn main() {
// From 的使用方式(明确调用)
let num1 = Number::from(30);
// Into 的使用方式(需要类型标注)
let num2: Number = 30.into();
}