gpt4 book ai didi

rust - 特质界限是否应该在struct和impl中重复?

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

以下代码使用具有泛型类型的结构。尽管其实现仅对给定的特征范围有效,但可以在具有或没有相同范围的情况下定义该结构。该结构的字段是私有(private)的,因此无论如何其他代码都无法创建实例。

trait Trait {
fn foo(&self);
}

struct Object<T: Trait> {
value: T,
}

impl<T: Trait> Object<T> {
fn bar(object: Object<T>) {
object.value.foo();
}
}
应该省略结构绑定(bind)的特征以符合DRY原理,还是应该给出它以阐明依赖关系?还是在某种情况下应优先选择一种解决方案?

最佳答案

这实际上取决于类型是什么。如果仅打算保留实现特征的值,则是的,它应该具有特征绑定(bind),例如

trait Child {
fn name(&self);
}

struct School<T: Child> {
pupil: T,
}

impl<T: Child> School<T> {
fn role_call(&self) -> bool {
// check everyone is here
}
}

在此示例中,仅允许 child 进入学校,因此我们对结构具有约束。

如果该结构旨在保留任何值,但您希望在实现特征时提供额外的行为,则否,该边界不应位于该结构上,例如
trait GoldCustomer {
fn get_store_points(&self) -> i32;
}

struct Store<T> {
customer: T,
}

impl<T: GoldCustomer> Store {
fn choose_reward(customer: T) {
// Do something with the store points
}
}

在此示例中,并非所有客户都是金牌客户,因此在结构上绑定(bind)约束是没有意义的。

关于rust - 特质界限是否应该在struct和impl中重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49229332/

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