首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的特征实现在约束到不同的关联类型时会发生冲突?

为什么我的特征实现在约束到不同的关联类型时会发生冲突?
EN

Stack Overflow用户
提问于 2021-10-12 09:34:58
回答 1查看 60关注 0票数 0

这里有一个重现我的问题的玩具示例。

我想根据Puddle是透明的还是Muddy的来创建一个不同的Splash实现。

编译器告诉我Muddy Splash和Clear Splash冲突。

然而,(到目前为止)我没有办法指定一个同时使用Puddle::Purity=Muddy和Puddle::Purity=Clear实现Puddle的类型P。ExamplePuddle也无法编译,因为Puddle的隐含存在冲突。

所以,如果我不能为任何类型P实现多个不同的Puddle::Purity,那么为什么我不能为不同的Puddle::Purity约束实现不同的Splash呢?

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 2021-10-12 09:34:58

这是一个open issue。根据问题中的评论,specialization可能是一种变通方法。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69538204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档