gpt4 book ai didi

rust - 从特质和特化实现

转载 作者:行者123 更新时间:2023-11-29 07:54:07 24 4
gpt4 key购买 nike

根据specialization RFC ,我应该能够在 struct 上拥有相同 trait 的多个 impl,方法是将一个指定为默认值。

我有代码:

#![feature(specialization)]
struct A(u32);

trait Dummy {}

impl<T> From<T> for A
where
T: Into<u32>,
{
default fn from(item: T) -> Self {
A(item.into())
}
}

impl<T> From<T> for A
where
T: Dummy,
{
fn from(item: T) -> Self {
A(2)
}
}

即使其中一个实现是默认的,编译器仍然告诉我这两个实现是冲突的。

最佳答案

您的第二个实现不是第一个的特化。这是与第一个冲突的替代实现。

特化要求所有匹配你的第二个 impl 的类型也匹配你的第一个 impl。换句话说,您的特化边界必须是默认实现边界的严格子集。来自 RFC:

This RFC proposes a design for specialization, which permits multiple impl blocks to apply to the same type/trait, so long as one of the blocks is clearly "more specific" than the other.

将特征定义更改为

trait Dummy: Into<u32> {}

使您的代码编译。

查看 https://github.com/rust-lang/rfcs/blob/master/text/1210-impl-specialization.md了解更多详情。

关于rust - 从特质和特化实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56309912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com