是什么让“impl Trait”成为一个“普遍”的论证,并作为一个“存在主义”的回归价值?

问题描述 投票:3回答:1

当我发现以下情况时,我正在阅读RFC on "expanding" impl Trait

相比之下,一个程序员首先学习:fn take_iter(t: impl Iterator)然后尝试:fn give_iter() -> impl Iterator将是成功的,没有任何严格的理解,他们只是从普遍转变为存在。

虽然我从逻辑的角度理解普遍与存在的关系,但是第一个是普遍的还是第二个存在的?

rust universal existential-type
1个回答
7
投票

RFC以多种方式多次定义术语:

存在类型(被调用者选择类型)和通用类型(调用者选择的位置)之间

关于普遍性与存在性的讨论很多(在今天的Rust,generics vs impl Trait中)。

  • 通用量化,即“对于任何类型T”,即“呼叫者选择”。这就是仿制药今天的工作方式。当你写fn foo<T>(t: T)时,你说这个函数适用于T的任何选择,并留给你的调用者选择T
  • 存在量化,即“对于某些类型T”,即“被叫者选择”。这就是今天impl Trait的工作方式(仅在返回位置)。当你写fn foo() -> impl Iterator时,你说这个函数会生成一些实现T的类型Iterator,但不允许调用者假设有关该类型的任何其他内容。

TL; DR:

  • fn take_iter(t: impl Iterator) - 呼叫take_iter的人选择混凝土类型。该函数必须适用于实现特征的整个“Universe”类型。
  • fn give_iter() -> impl Iterator - give_iter的实施挑选具体类型。有一些类型“存在”并实现将由函数返回的特征。
© www.soinside.com 2019 - 2024. All rights reserved.