rust - 为什么我的特征实现在约束到不同的关联类型时会发生冲突?
问题描述
这是一个重现我的问题的玩具示例。
我想根据水坑是清澈还是泥泞来创建不同的 Splash 实现。
编译器告诉我我的 Muddy Splash 和 Clear Splash 冲突。
但是,我无法找到(到目前为止)指定一个类型 P,它使用 Puddle::Purity=Muddy 和 Puddle::Purity=Clear 实现 Puddle。ExamplePuddle 也无法与 Puddle 的冲突 impl 进行编译。
因此,如果我不能为任何类型 P 实现多个不同的 Puddle::Purity,那么为什么我不能为不同的 Puddle::Purity 约束实现不同的 Splash?
trait WaterPurity {}
struct Muddy;
impl WaterPurity for Muddy {}
struct Clear;
impl WaterPurity for Clear {}
trait Puddle {
type Purity: WaterPurity;
}
trait Splash {}
struct Foot;
// Conflicting implementations of Splash for type (_, Foot)
impl<P> Splash for (P, Foot) where
P: Puddle<Purity=Muddy> {}
impl<P> Splash for (P, Foot) where
P: Puddle<Purity=Clear> {}
struct ExamplePuddle;
// Conflicting implementations of trait Puddle for ExamplePuddle
impl Puddle for ExamplePuddle {
type Purity = Muddy;
}
impl Puddle for ExamplePuddle {
type Purity = Clear;
}
解决方案
推荐阅读
- java - RSS 内存在空闲 Java 进程上增长
- python-3.x - 高效循环数百万个元素
- angular - 带有 REST API 的 Angular Universal
- css - 我无法使用 css 网格定位我想要的东西
- web3-java - 如何对 Web3j 的 Byte32 值数组进行编码以传递给我的智能合约?
- java - Java H2 数据库 - 在服务器启动期间设置管理员密码
- python-3.x - 我无法按用户输入的类的对象打印值
- python - 来自 csv 文件的 jinja 中的变量列表
- android - LinearLayout - 如果视图不适合一行,则换行
- post - 如何使用 Jersey 将参数放入 post 请求中?