什么使'impl Trait`成为一个论点"普遍"并作为回归价值"存在主义"?

时间:2017-12-21 17:18:31

标签: rust universal existential-type

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

  

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

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

1 个答案:

答案 0 :(得分:7)

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

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

  

围绕普遍性与存在性进行了大量讨论(在今天的Rust,generics vs impl Trait中)。

  
      
  • 通用量化,即&#34;对于任何类型的T&#34;,即&#34;来电者   选择&#34 ;.这就是仿制药今天的工作方式。当你写作   fn foo<T>(t: T),您说该功能适用​​于任何功能   选择T,然后将其留给来电者选择T

  •   
  • 存在量化,即&#34;对于某些类型T&#34;,即&#34;被调用者   选择&#34 ;.这就是今天impl Trait的工作方式(作为回报)   仅限位置)。当你写fn foo() -> impl Iterator时,你就是了   说该函数将生成一些实现的类型T   Iterator,但不允许来电者承担其他任何事情   关于那种类型。

  •   

TL; DR:

  • fn take_iter(t: impl Iterator) - 调用take_iter的人选择具体类型。该功能必须适用于整个&#34;宇宙&#34;实现特征的类型。

  • fn give_iter() -> impl Iterator - give_iter的实现选择具体类型。有一些类型存在&#34;存在&#34;并实现函数返回的特征。