rust - 如何绑定(bind) Iterator::Item 的类型?

标签 rust

我不确定如何为通用迭代器指定迭代器输出类型的界限。在 Rust 1.0 之前,我曾经能够这样做:

fn somefunc<A: Int, I: Iterator<A>>(xs: I) {
    xs.next().unwrap().pow(2);
}

但现在,我不确定如何为迭代器的 Item 类型设置界限。

fn somefunc<I: Iterator>(xs: I) {
    xs.next().unwrap().pow(2);
}
error: no method named `pow` found for type `<I as std::iter::Iterator>::Item` in the current scope
 --> src/main.rs:2:28
  |
2 |         xs.next().unwrap().pow(2);
  |                            ^^^

我怎样才能让它工作?

最佳答案

您可以引入第二个泛型类型参数并在其上设置界限:

fn somefunc<A: Int, I: Iterator<Item = A>>(mut xs: I) {
    xs.next().unwrap().pow(2);
}

您还可以将特征边界放在关联类型本身上

fn somefunc<I: Iterator>(mut xs: I)
where
    I::Item: Int,
{
    xs.next().unwrap().pow(2);
}

关于rust - 如何绑定(bind) Iterator::Item 的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27801810/

相关文章:

haskell - 如何在 Rust 中复制 Haskell 的 `scanl (+) 0 xs`?

size - bool 保证是 1 个字节吗?

rust - 为什么 cargo build 在 git 更改锁时忽略锁文件?

serialization - 如何在不包含枚举变体名称的情况下序列化枚举?

sorting - 如何在Rust中按降序对Vector进行排序?

rust - 对闭包中 ref 关键字的使用感到困惑

arrays - 如何使用函数初始化数组?

oop - Rust 中的对象和类

rust - 如何在不展开的情况下将 Option<Result<T, Error>> 转换为 Option<T>?

error-handling - 如何为自定义错误类型实现 From 特征?