为什么嵌套的关联类型路径被认为是不明确的?
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)
这是编译器的限制还是预期的行为?