我看到它std::convert::Into
有一个实现任何实现的东西std::convert::From
:
impl<T, U> Into<U> for T where U: From<T>
Run Code Online (Sandbox Code Playgroud)
有更具体的实现From
,虽然Into
目前只有3个特定的实现,这使得它似乎是From
默认实现的主流决定.我确信有些时候我只想实现Into
而不是From
,但我没有看到它们.
Lev*_*ans 22
有趣的是,关于这些特征的原始RFCstd::convert
提出了相反的措辞:
impl<T, U> From<T> for U where T: Into<U>
Run Code Online (Sandbox Code Playgroud)
但是在执行它的PR上,它被改为相反:
添加了
From
=>Into
实现,这使得可以在两个方向上添加转换而不会产生连贯性.例如,我们现在有了From<[T]> for Vec<T> where T: Clone
,它产生相应的进入另一个方向 - 尽管这两种类型生活在不同的板条箱中.我也相信这解决了一些关于实现From而不是Into的事情的担忧
虽然可能impl<'a, T> Into<Foo> for &'a [T]
,但impl<'a, T> From<&'a [T]> for Foo
确实不可能做到.
第一次尝试提出了E0210
:
error:type参数
T
必须用作某些本地类型的类型参数(例如MyStruct<T>
); 只有当前包中定义的特征可以为类型参数实现
但最后一刻的这种变化反映了这一点From
并且Into
基本相同.From
被选择为首选,因为从"类型参数与本地类型"的观点来看它的限制性较小.
标准库中只有两个实现的例子Into
而不是From
:
impl Into<Vec<u8>> for String
impl Into<OsString> for PathBuf
Run Code Online (Sandbox Code Playgroud)
但他们是我认为他们的接口逻辑的反思.OsString
实现了From<String>
和From<T> where T: AsRef<OsStr>
,因为它们是天然的东西,你会想建立一个OsString
从.
但是,PathBuf
仍然实现Into<OsString>
为其From<OsString>
实现的反向操作,但这种逻辑属于PathBuf
,而不是OsString
.
归档时间: |
|
查看次数: |
5034 次 |
最近记录: |