如何绑定Iterator::Item的类型?
How to bound the type of Iterator::Item?
我不确定如何为通用迭代器指定迭代器输出类型的界限。在 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 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);
}