我们有两个特征A
和B
A
的类型实现B
。A
,以引用任何实现A
的类型。B
,以引用任何实现B
的类型。实际上,执行这三个操作都会导致冲突,因为现在对实现a
的类型的引用将有两个B
的实现。一个是由于impl
我无法删除
impl
下面是一个展示行为的示例代码。
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 {}
这将导致以下错误:
error[E0119]: conflicting implementations of trait `B` for type `&_`:
|
| impl<T: A> B for T {}
| --------------------- first implementation here
| impl<'a, T: B> B for &'a T {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `&_`
是否可以使用Rust-typesystem,以确保在出现
impl B时
关于这个话题,Rust internals论坛上进行了一些讨论,首先是Nicholas Matsakis关于如何处理重叠的trait实现问题的博客文章。
今天,(不稳定的)锈菌有一些IML专业化,但这只适用于更为通用的更为具体的IML。
所以我认为答案是今天没有一个好的方法来做这件事,但是在未来的某个时候,Rust很有可能会进化到允许表达重叠的特质内涵。
编译以下代码时: 我得到一个错误: 错误消息试图说明什么?还有,怎么修? 有一个相关的问题,但解决方案是修改特征<code>a</code>(在我的例子中对应于<code>可绘制</code>),但这在这里是不可能的,因为<code>可以绘制</code>来自外部库。
我有一个问题: 多个结构实现一个trait 都可以以相同的方式实现trait 我考虑过写这个(简短版本) 游戏场 这无法编译: 这里怎么了?或者有没有其他方法可以通用地实现此,而不必为和分别键入一次? 谢谢你们
我想创建一个全局状态(数据对象,而不是服务对象)。 我创建了类。 我想避免常规的全局状态, 但是,所有的教程都展示了如何为服务对象设置一个DI,并注册到接口。 如何根据需要使用注入? 编辑 我试过: 公共类AppInjector扩展了AbstractModule{ 但是我看到中没有新的long值。
用 echarts 实现 饼状图 这种
突变性可以是性状中的一个通用参数吗?我想为一个类型的可变和不可变变体实现一个特性,而不必复制 一厢情愿的伪代码: