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

Ibr*_*med 9 rust

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

fn flatten<I>(iter: I) -> Option<I::Item::Item>
where
    I: Iterator,
    I::Item: IntoIterator,
{
    None
}
Run Code Online (Sandbox Code Playgroud)
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`
Run Code Online (Sandbox Code Playgroud)

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

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

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

She*_*ter 9

这是编译器限制:嵌套关联类型投影过于保守 #38078。有一点希望粉笔会改善这种情况,但不能保证它会。