4.3 `From` 与 `Into`

03-From 与 Into — Comprehensive Rust

译文 · 基于 Comprehensive Rust

原文链接: https://google.github.io/comprehensive-rust/std-traits/from-and-into.html

4.3 From 与 Into

类型实现 From 与 Into 以便于类型转换。与 as 不同,这些 trait 对应无损、不可失败的转换。

1
2
3
4
5
6
7
8
9
// Copyright 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0
fn main() {
    let s = String::from("hello");
    let addr = std::net::Ipv4Addr::from([127, 0, 0, 1]);
    let one = i16::from(true);
    let bigger = i32::from(123_i16);
    println!("{s}, {addr}, {one}, {bigger}");
}

实现了 From 时,会自动实现 Into:

1
2
3
4
5
6
7
8
9
// Copyright 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0
fn main() {
    let s: String = "hello".into();
    let addr: std::net::Ipv4Addr = [127, 0, 0, 1].into();
    let one: i16 = true.into();
    let bigger: i32 = 123_i16.into();
    println!("{s}, {addr}, {one}, {bigger}");
}
  • 因此通常只实现 From,类型也会自动获得 Into 实现。
  • 声明函数参数输入类型为「任何可转换成 String 的东西」时,规则相反:应使用 Into。你的函数会接受实现了 From 的类型,以及_只_实现了 Into 的类型。
最后修改 August 11, 2026: 更新 (70a5af133)