我正在定义一个包含I:
例如:
struct Test;
trait Bar<I> {
fn bar(&self, i: &I);
}
impl<T, I: IntoIterator<Item=T>> Bar<I> for Test {
fn bar(&self, i: &I) {
for x in i {
println!("woo!");
}
}
}
fn main() {
let vec = vec!(1, 2, 3);
let test = Test;
test.bar(&vec);
}
运动场连接
这会导致错误:
<anon>:10:9: 12:10 error: the trait `core::iter::Iterator` is not implemented for the type `&I` [E0277] <anon>:10 for x in i { <anon>:11 println!("woo!"); <anon>:12 } <anon>:10:9: 12:10 help: see the detailed explanation for E0277 <anon>:10:9: 12:10 note: `&I` is not an iterator; maybe try calling `.iter()` or a similar method <anon>:10:9: 12:10 note: required by `core::iter::IntoIterator::into_iter` error: aborting due to previous error playpen: application terminated with error code 101
我一直在玩弄使用
Deref
trait来看看我是否能找到工作,但没有用。
我真的希望在函数定义中保留不可变引用,因为这个特性试图对许多类型进行泛型,并使用
Bar定义其他实现
在Rust中,按照惯例,名称以开头的方法将其参数按值转换为另一个值,通常从原始值重用一些资源。
IntoIterator
trait及其intoiter
遵循该约定。
你确定你需要使用
struct Test;
trait Bar<I> {
fn bar(&self, i: I);
}
impl<T, I: IntoIterator<Item=T>> Bar<I> for Test {
fn bar(&self, i: I) {
for x in i {
println!("woo!");
}
}
}
fn main() {
let vec = vec!(1, 2, 3);
let test = Test;
test.bar(&vec);
}
游戏场
说I
是一个IntoIterator
并没有说任何关于
您特别想要绑定
impl<I, T> Bar<I> for Test
where for<'a> &'a I: IntoIterator<Item = T>
{
fn bar(&self, i: &I) {
for x in i {
println!("woo!");
}
}
}
的代码
这里有一些关于
T
参数的选择,例如。
into迭代器
最好的选择将取决于你用它做什么。对于问题中的具体示例,我会选择3,因为
Item
类型根本不重要。数字2是有意义的,因为几乎所有具有的类型
我克隆了https://gitlab.com/pwoolcoc/soup并运行了示例文件。一切正常,但是当我用与示例文件相同的文件创建一个新项目时,我遇到了一个错误。代码是: 货物档案 错误:
假设我保证(通过未指定的方式)我有一个类型的数组,其中包含有效且不相交的可变指针,所有指针都具有生存期。如何将其转换为可变引用数组
试图在我的业务模型中使用值对象时,我遇到了以下代码的问题: 是否有一种通用的方法来声明(string->ValueObject)映射方法?
问题内容: 我有以下接口,我想在类中多次实现: 现在,我希望能够通过以下方式实现此接口: 但是,这给了我错误:在行上: 是否可以使用不同的泛型两次实现接口?如果不是,那么我在这里可以做的下一步工作是什么? 问题答案: 您需要使用内部或匿名类。例如:
和函数类似,实现(implementation)也需要关注保持泛型。(原文:Similar to functions, implementations require care to remain generic.) struct S; // 具体类型 `S` struct GenericVal<T>(T,); // 泛型类型 `GenericVal` // GenericVal 的实现,此处我们