作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在执行 Into
时遇到问题Rust 中通用结构的特征。下面是我正在尝试做的简化版本:
struct Wrapper<T> {
value: T
}
impl<T> Into<T> for Wrapper<T> {
fn into(self) -> T {
self.value
}
}
当我尝试编译时,出现以下错误:
error: conflicting implementations of trait `std::convert::Into<_>` for type `Wrapper<_>`: [--explain E0119]
--> <anon>:5:1
|>
5 |> impl<T> Into<T> for Wrapper<T> {
|> ^
note: conflicting implementation in crate `core`
我的印象是问题出在标准库中的以下实现:
impl<T, U> Into<T> for U where T: From<U>
自 T
可能实现From<Wrapper<T>>
,这可能是一个冲突的实现。有什么办法可以解决这个问题吗?例如,有没有办法让 impl<T>
block 限制 T
到不实现 From<Wrapper<T>>
的类型?
最佳答案
实际上...没有办法将其限制为类型 T
未实现 From<Wrapper<T>>
. Rust 没有“否定”子句。
通常情况下,实现方式Into
就是简单地实现From
得到 Into
免费。但是,在您的情况下,实现将是:
impl<T> From<Wrapper<T>> for T {
fn from(w: Wrapper<T>) -> T { w.value }
}
这就违反了孤儿规则。不允许执行 From
对于所有 T
.
可能有一个技巧,但我在这里看不到。
关于generics - 无法为通用结构实现 Into 特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39186652/
我是一名优秀的程序员,十分优秀!