Trait core::convert::From 1.0.0[−][src]
Expand description
用于在消耗输入值的同时进行值到值的转换。它是 Into
的倒数。
与标准 Into
相比,人们应该总是更喜欢实现 From
,因为由于标准库中的全面实现,实现 From
会自动为 Into
提供一个 Into
的实现。
仅当针对 Rust 1.41 之前的版本并将其转换为当前 crate 以外的类型时,才实现 Into
。
由于 Rust 的孤儿规则,From
在早期版本中无法进行这些类型的转换。
有关更多详细信息,请参见 Into
。
在泛型函数上指定 trait bounds 时,优先使用 Into
。
这样,直接实现 Into
的类型也可以用作参数。
From
在执行错误处理时也非常有用。当创建一个能够失败的函数时,返回类型通常为 Result<T, E>
形式。
From
trait 通过允许函数返回封装了多种错误类型的单个错误类型,简化了错误处理。有关更多详细信息,请参见示例部分和这本 书。
注意:此 trait 一定不能失败。如果转换可能失败,请使用 TryFrom
。
泛型实现
From<T> for U
意味着Into
<U> for T
From
是反射的,这意味着From<T> for T
被实现
Examples
String
实现 From<&str>
:
从 &str
到字符串的显式转换如下:
let string = "hello".to_string();
let other_string = String::from("hello");
assert_eq!(string, other_string);
Run在执行错误处理时,通常对于您自己的错误类型实现 From
很有用。
通过将底层错误类型转换为封装底层错误类型的自定义错误类型,我们可以返回单个错误类型,而不会丢失有关底层原因的信息。
‘?’ 运算符通过调用 Into<CliError>::into
自动将底层错误类型转换为我们的自定义错误类型,该 Into<CliError>::into
是在实现 From
时自动提供的。
然后,编译器会推断应使用 Into
的哪种实现。
use std::fs;
use std::io;
use std::num;
enum CliError {
IoError(io::Error),
ParseError(num::ParseIntError),
}
impl From<io::Error> for CliError {
fn from(error: io::Error) -> Self {
CliError::IoError(error)
}
}
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)?;
let num: i32 = contents.trim().parse()?;
Ok(num)
}
RunRequired methods
Implementors
将 0x00..=0xFF 中的字节映射到 char
,该 char
的代码点具有相同的值,即 U+0000..=U+00FF。
Unicode 的设计使其可以使用 IANA 称为 ISO-8859-1 的字符编码有效地解码字节。 此编码与 ASCII 兼容。
请注意,这与 ISO/IEC 8859-1 又名不同 ISO 8859-1 (连字符少一个),它留下了一些 “blanks” 字节值,这些值未分配给任何字符。 ISO-8859-1 (属于 IANA) 将它们分配给 C0 和 C1 控制代码。
请注意,这也与 Windows-1252 也不同 代码页 1252,它是 ISO/IEC 8859-1 的超集,它为标点符号和各种拉丁字符分配了一些 (不是全部) 空格。
为了进一步混淆,在 Web 上 ascii
,iso-8859-1
和 windows-1252
都是 Windows-1252 超集的别名,该超集用相应的 C0 和 C1 控制代码填充了其余的空白。
稳定性注意事项: 该 impl 尚不存在,但我们 “保留空间” 以在将来添加它。 有关详细信息,请参见 rust-lang/rust#64715。