【问题标题】:Why does Rust prevent implementing an external trait for an external struct?为什么 Rust 会阻止为外部结构实现外部特征?
【发布时间】:2020-07-25 20:36:43
【问题描述】:

我刚刚遇到了为我不拥有的类型实现我不拥有的特征的问题。然后我用谷歌搜索了确切的How do I implement a trait I don't own for a type I don't own? 问题。

让我感到困惑的是这种限制背后的动机。我来自 Scala,在那里可以有一个外部类型的外部类型类实例。

为什么 Rust 会限制这一点?

【问题讨论】:

标签: rust traits


【解决方案1】:

我刚刚阅读了Rust Book关于实现特征的章节,正如@AlexLarionov 在评论中所建议的那样,选择合适的实现是不可能的:

但是我们不能在外部类型上实现外部特征。例如, 我们无法在聚合器中实现 Vec<T> 上的 Display 特征 crate,因为 DisplayVec<T> 是在标准库中定义的 并且不是我们的聚合器板条箱本地的。这个限制是一部分 程序的一种属性称为连贯性,更具体地说 孤儿规则,之所以如此命名是因为父类型不存在。这 规则确保其他人的代码不会破坏您的代码,反之亦然 反之亦然。如果没有这个规则,两个 crate 可以实现相同的 trait 相同的类型,Rust 不知道使用哪个实现。

【讨论】:

    猜你喜欢
    • 2021-11-11
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多