定义:
pub trait From<T> {fn from(T) -> Self;}
用来将其他类型准换为自己的类型
例1:显式调用from函数
let string = "hello".to_string();let other_string = String::from("hello");assert_eq!(string, other_string);
例2:通过?运算符来调用
当为CliError实现From<io::Error>::from后,会自动为io::Error生成一个Into<CliError>::into?会在返回值上调用into方法将此io::Error转换为CliError类型
这在当函数返回单个错误类型来代表所有可能失败的方式时很有用,即使其可能会因很多种原因失败。
use std::fs;use std::io;use std::num;enum CliError {IoError(io::Error),ParseError(num::ParseIntError),}// 为io::Error实现转换impl From<io::Error> for CliError {fn from(error: io::Error) -> Self {CliError::IoError(error)}}// 为num::ParseIntErro实现转换impl From<num::ParseIntError> for CliError {fn from(error: num::ParseIntError) -> Self {CliError::ParseError(error)}}fn open_and_parse_file(file_name: &str) -> Result<i32, CliError> {let mut contents = fs::read_to_string(&file_name)?; // 自动调用From函数let num: i32 = contents.trim().parse()?;Ok(num)}
