【问题标题】:Why are nested associated type paths considered ambiguous?为什么嵌套的关联类型路径被认为是不明确的?
【发布时间】:2021-02-16 14:31:41
【问题描述】:

为什么嵌套的关联类型路径被认为是不明确的?

fn flatten<I>(iter: I) -> Option<I::Item::Item>
where
    I: Iterator,
    I::Item: IntoIterator,
{
    None
}
error[E0223]: ambiguous associated type
 --> src/lib.rs:1:34
  |
1 | fn flatten<I>(iter: I) -> Option<I::Item::Item>
  |                                  ^^^^^^^^^^^^^ help: use fully-qualified syntax: `<<I as Iterator>::Item as Trait>::Item`

编译器不应该能够在没有完全限定语法的情况下解析路径吗?我只能指一种类型,所以我不明白为什么它是模棱两可的。在这种简单的情况下,这并不是一个真正的问题,但在更复杂的用例中,它变得很痛苦:

fn blah() -> <<<<A as B>::C as D>::E as F>::G as H>::I as J>::K> {}

这是编译器的限制还是预期的行为?

【问题讨论】:

    标签: rust


    【解决方案1】:

    这是一个编译器限制:Nested associated type projection is overly conservative #38078。有一点希望 chalk 会改善这种情况,但不能保证一定会。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      • 2015-12-17
      相关资源
      最近更新 更多