rust - 为什么嵌套的关联类型路径被认为是模棱两可的?

标签 rust

为什么嵌套的关联类型路径被认为是模棱两可的?

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/

相关文章:

rust - 如何将参数传递给存储的回调?

rust - 为什么 `cargo new` 创建二进制文件而不是库?

pointers - 无法移出取消引用(由于索引,取消引用是隐式的)

rust - 在 Rust 中允许变量阴影背后的基本原理是什么?

rust - 是否有针对 Rc 或 Arc 的操作可以克隆基础值并将其返回给调用者?

python - 返回对 PyO3 中成员字段的引用

rust - 如何解决 Rust 中的无约束类型参数错误

rust - 如何实现 `apply_n_times` 函数?

arrays - 在 Rust 中初始化字符串数组

c++ - Rust 中有类似表达式模板的东西吗?