为什么嵌套的关联类型路径被认为是模棱两可的?
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> {}
这是编译器的限制还是预期的行为?
最佳答案
这是编译器的限制:Nested associated type projection is overly conservative #38078。有人希望chalk会改善这种情况,但不能保证会有所改善。
关于rust - 为什么嵌套的关联类型路径被认为是模棱两可的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66226345/