Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics Rust中的谓词是什么?_Generics_Rust_Traits_Terminology - Fatal编程技术网

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
;结论谓词必须是其他的。我没有想到我所做的对编译器没有多大帮助。