Generics Rust中的谓词是什么?
当我尝试编译此代码时:Generics Rust中的谓词是什么?,generics,rust,traits,terminology,Generics,Rust,Traits,Terminology,当我尝试编译此代码时: impl<S, V> Storage for Database<S> where S: StoredElement, V: VisibleElement, impl数据库存储 哪里 S:StoredElement, V:可见元素, 编译器抱怨 error[E0207]:类型参数'V'不受impl-trait、self-type或谓词的约束 -->src/main.rs:77:9 | 77 |数据库的impl存储 |^无约束类型参
impl<S, V> Storage for Database<S>
where
S: StoredElement,
V: VisibleElement,
impl数据库存储
哪里
S:StoredElement,
V:可见元素,
编译器抱怨
error[E0207]:类型参数'V'不受impl-trait、self-type或谓词的约束
-->src/main.rs:77:9
|
77 |数据库的impl存储
|^无约束类型参数
我假设V:VisibleElement
是一个谓词,但显然编译器不同意
那么,在Rust中,谓词到底是什么呢?
V:VisibleElement
在这个上下文中是谓词。问题是谓词没有充分约束类型,使得V
在任何方面都是相关的
编译器会看到V
和V:VisibleElement
,然后它会将它们扔掉,因为它们不会影响:
- 您正在实现的特性(impl trait)
- 或者您正在实现特征的类型(
)自我类型
- 或其中任一约束(谓词或边界)
V
和S
之间的关系,那么这将是有意义的,因为它将添加有关此处定义的实现的信息。例如,可能是这样的:
impl<S, V> Storage for Database<S>
where
S: StoredElement<ChildType = V>,
V: VisibleElement,
impl数据库存储
哪里
S:StoredElement,
V:可见元素,
我在这里创建了类型,因为我不知道实际的类型来自哪里。这将是V
的一个有意义的用法,因为它不仅将S
约束为StoredElement
,而且约束为StoredElement
S,其关联的ChildType
实现了VisibleElement
。这将仅定义满足该条件(谓词)的数据库的存储的实现
编译器正在抱怨,因为您添加了一个没有任何影响的参数,这很可能是您的错误。请完成一个完整的操作。太棒了,非常感谢!我认为文件应该更清楚;我想我是在充分约束V
;结论谓词必须是其他的。我没有想到我所做的对编译器没有多大帮助。