我刚遇到一个问题,即为一个我不拥有的类型实现一个我不拥有的特征。然后,我搜索了确切的How do I implement a trait I don't own for a type I don't own?问题。
令我困惑的是这种限制的动机。我来自Scala,可以为外部类型使用外部typeclass实例。
Rust为什么要限制它?
答案 0 :(得分:0)
我刚刚阅读了Rust Book的有关实现特征的章节,正如@AlexLarionov在评论中建议的那样,不可能选择合适的实现:
但是我们不能在外部类型上实现外部特征。例如, 我们无法在聚合器中实现
Display
的{{1}}特性 装箱,因为Vec<T>
和Display
在标准库中定义 并且不在我们的聚合板条箱中。此限制是 程序的属性,称为一致性,更具体地说 孤立规则,之所以如此命名是因为不存在父类型。这个 规则确保他人的代码不会破坏您的代码,反之 反之亦然。如果没有规则,则两个板条箱可能会为 相同的类型,Rust不知道要使用哪种实现。