为什么 Rust 阻止为外部结构实现外部特征?

Som*_*ame 9 traits rust

我刚刚遇到了为我不拥有的类型实现我不拥有的特征的问题。然后我用谷歌搜索了确切的如何为我不拥有的类型实现我不拥有的特征?问题。

让我困惑的是这种限制背后的动机。我来自 Scala,在那里可以为外部类型提供外部类型类实例。

为什么 Rust 会限制这一点?

Som*_*ame 1

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

\n
\n

但我们可以\xe2\x80\x99t 在外部类型上实现外部特征。例如,\n我们可以\xe2\x80\x99t 在我们的聚合器\ncrate 中实现该Display特征Vec<T>,因为 和DisplayVec<T>在标准库中定义的\n并且对于我们的聚合器箱来说是\xe2\x80\x99t 本地的。此限制是称为一致性的程序属性的一部分,更具体地说是诺范规则,如此命名是因为父类型不存在。此规则确保其他人的代码不能破坏您的代码,反之亦然。如果没有规则,两个板条箱可以为相同类型实现相同的特征,而 Rust 将\xe2\x80\x99 不知道要使用哪个实现。

\n
\n

  • 这就引出了一个问题:为什么 rust 没有为我们在“Vec”上实现“Display”。 (2认同)