gpt4 book ai didi

generics - Rust 中的谓词是什么?

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

当我尝试编译这段代码时:

impl<S, V> Storage for Database<S>
where
S: StoredElement,
V: VisibleElement,

编译器报错

error[E0207]: the type parameter `V` is not constrained by the impl trait, self type, or predicates
--> src/main.rs:77:9
|
77 | impl<S, V> Storage for Database<S>
| ^ unconstrained type parameter

我假设 V: VisibleElement 是一个谓词,但显然编译器不同意。

那么,在 Rust 中,谓词到底是什么?

最佳答案

V: VisibleElement 在此上下文中的谓词。问题是谓词没有充分限制 V 以任何方式相关的类型。

编译器看到 VV: VisibleElement,然后将它们丢弃,因为它们对以下方面没有影响:

  • 你正在实现哪个特征(impl trait)
  • 或您正在为其实现特征的类型(自身类型)
  • 或对其中任何一个的任何约束(谓词 或边界)。

例如,如果谓词包含 VS 之间的关系,那么这是有意义的,因为它会添加有关此处定义了哪些实现的信息。例如,这可能是这样的:

impl<S, V> Storage for Database<S>
where
S: StoredElement<ChildType = V>,
V: VisibleElement,

我在这里编造了类型,因为我不知道实际类型来自哪里。这将是 V 的一个有意义的用法,因为它不仅将 S 限制为 StoredElement,而且限制为 StoredElement关联的 ChildType 实现了 VisibleElement。这只会为满足条件(谓词)的 Database 定义 Storage 的实现。

编译器提示是因为您添加了一个没有任何影响的参数,这很可能是您的错误。

关于generics - Rust 中的谓词是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52318662/

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