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

时间:2020-07-25 20:36:43

标签: rust traits

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

令我困惑的是这种限制的动机。我来自Scala,可以为外部类型使用外部typeclass实例。

Rust为什么要限制它?

1 个答案:

答案 0 :(得分:0)

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

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