Rust 如果两个特性都是为引用而实现的,那么如何为实现特性A的所有类型实现特性B?
我们有两个特点,分别是Rust 如果两个特性都是为引用而实现的,那么如何为实现特性A的所有类型实现特性B?,rust,Rust,我们有两个特点,分别是A和B 我可以为实现A的所有类型实现B 对于实现A的任何类型的引用,我都可以实现A 对于实现B的任何类型的引用,我都可以实现B 实际上,执行这三个操作都会导致冲突,因为现在对实现a的类型的引用将有两个B的实现。一个是由于impl A for&T,另一个是由于impl B for T(然后是impl B for&T) 我无法删除impl B for&t,因为可能存在实现B而不是A的类型 下面是一个显示该行为的示例代码 trait A {} trait B {} impl&l
A
和B
A
的所有类型实现B
A
的任何类型的引用,我都可以实现A
B
的任何类型的引用,我都可以实现B
a
的类型的引用将有两个B
的实现。一个是由于impl A for&T
,另一个是由于impl B for T
(然后是impl B for&T
)
我无法删除impl B for&t
,因为可能存在实现B
而不是A
的类型
下面是一个显示该行为的示例代码
trait A {}
trait B {}
impl<'a, T: A> A for &'a T {}
impl<T: A> B for T {}
impl<'a, T: B> B for &'a T {}
trait A{}
性状B{}
impl在这个主题上已经有了一些讨论,首先是关于如何处理重叠的trait实现的问题
如今,(不稳定的)锈病已经出现了,但这只适用于严格意义上更具体的锈病,而不是更普通的锈病
因此,我认为答案是,目前还没有一个好的方法可以做到这一点,但在未来的某个时候,锈菌很有可能会进化到允许表达重叠的性状impls。这一点和其他人对此进行了大量讨论。总体而言,总结是“还没有”,但其中可能有一些想法可能会有所帮助。@ChrisEmerson:也许值得回答这个问题?