Rust 什么时候应该实现std::convert::From vs std::convert::Into?

Rust 什么时候应该实现std::convert::From vs std::convert::Into?,rust,Rust,我看到它对任何实现的东西都有一个实现: impl-Into for T 哪里 U:从, 在Rust 1.0标准库中,有许多From的实现,而Into仅在3个位置实现。这使它看起来像是从实现的应该是默认值。我确信,有时我想将实现到中,而不是从中实现,但我没有看到它们。TL;DR:更喜欢从实现 有趣的是,关于traits,我们提出了相反的总体实现: impl<T, U> From<T> for U where T: Into<U> 在Rust 1.1

我看到它对任何实现的东西都有一个实现:

impl-Into for T
哪里
U:从,

在Rust 1.0标准库中,有许多
From
的实现,而
Into
仅在3个位置实现。这使它看起来像是从实现的
应该是默认值。我确信,有时我想将
实现到
中,而不是从
中实现
,但我没有看到它们。

TL;DR:更喜欢从
实现


有趣的是,关于traits,我们提出了相反的总体实现:

impl<T, U> From<T> for U
where
    T: Into<U>
在Rust 1.14之前的标准库中,只有两个示例将
实现为
,而不是从
实现

  • impl-Into-for-String
  • impl-in for-PathBuf
我认为这是他们接口逻辑的反映
OsString
实现了
From
From,其中T:AsRef
,因为它们是您想要构建
OsString
的自然对象

然而,
PathBuf
仍然实现
Into
作为其
实现的反向操作,但此逻辑属于
PathBuf
,而不是
OsString

PathBuf
仍然实现
Into
← 这一点在1.14.0:D中已被修复。标准库中不再有任何内容。