rust by example:闭包迭代器any给出E0308
我一直在用示例书的代码来测试Rust,但我被难住了rust by example:闭包迭代器any给出E0308,rust,Rust,我一直在用示例书的代码来测试Rust,但我被难住了 错误[E0308]:类型不匹配 -->功能。rs:81:95 81 | fn any(&mut self,mut F:F)->bool其中F:FnMut(self::Item)->bool{} |^^应为布尔值,找到() 我使用的完整代码片段是: fn closure_iterator_any ( v1a: i32 , v1b: i32 , v1c: i32 , v2a: i32 , v2b: i32 , v2c: i32 ) {
错误[E0308]:类型不匹配
-->功能。rs:81:95
81 | fn any(&mut self,mut F:F)->bool其中F:FnMut(self::Item)->bool{}
|^^应为布尔值,找到()
我使用的完整代码片段是:
fn closure_iterator_any ( v1a: i32 , v1b: i32 , v1c: i32 , v2a: i32 , v2b: i32 , v2c: i32 )
{
pub trait Iterator
{
type Item ; // type of item being iterated over
fn any < F > ( & mut self , mut f: F ) -> bool where F: FnMut ( Self::Item ) -> bool {}
}
let vec1 = vec! [ v1a , v1b , v1c ] ;
let vec2 = vec! [ v2a , v2b , v2c ] ;
println! ( "2 in vector 1: {}" , vec1 . iter () . any ( |&x| x == 2 ) ) ; // iter returns &i32
println! ( "2 in vector 2: {}" , vec2 . into_iter () . any ( |x| x == 2 ) ) ; // into returns i32
let array1 = [ v1a , v1b , v1c ] ;
let array2 = [ v2a , v2b , v2c ] ;
println! ( "2 in array 1: {}" , array1 . iter () . any ( |&x| x == 2 ) ) ;
println! ( "2 in array 2: {}" , array2 . into_iter () . any ( |&x| x == 2 ) ) ;
}
fn闭包\u迭代器\u any(v1a:i32、v1b:i32、v1c:i32、v2a:i32、v2b:i32、v2c:i32)
{
发布特征迭代器
{
type Item;//正在迭代的项的类型
fn any(&mut self,mut F:F)->bool其中F:FnMut(self::Item)->bool{}
}
设vec1=vec![v1a,v1b,v1c];
设vec2=vec![v2a,v2b,v2c];
println!(“向量1:{}中的2”,vec1.iter().any(|&x | x==2));//iter返回&i32
println!(“向量2中的2:{}”,vec2.into_iter().any(|x | x==2));//into返回i32
设array1=[v1a,v1b,v1c];
设array2=[v2a,v2b,v2c];
println!(“数组1:{}中的2”,array1.iter().any(|&x | x==2));
println!(“数组2:{}中的2”,array2.into_iter().any(|&x | x==2));
}
我知道有过多的空格,当学习一门新语言时,我想知道哪里可以放空格,哪里不能。我也不太理解闭包。在这个例子中,带有trait的部分
pub trait Iterator {
// The type being iterated over.
type Item;
// `any` takes `&mut self` meaning the caller may be borrowed
// and modified, but not consumed.
fn any<F>(&mut self, f: F) -> bool
where
// `FnMut` meaning any captured variable may at most be
// modified, not consumed. `Self::Item` states it takes
// arguments to the closure by value.
F: FnMut(Self::Item) -> bool,
{}
}
pub特征迭代器{
//正在迭代的类型。
类型项目;
//`any`takes`&mut self`表示呼叫者可能被借用
//和修改,但不消耗。
fn任意(&mut self,f:f)->bool
哪里
//`FnMut`表示任何捕获的变量最多可以是
//已修改,未使用。`Self::Item`表示需要
//通过值为闭包添加参数。
F:FnMut(Self::Item)->bool,
{}
}
只是向您显示方法的签名。具体来说,它告诉您它接受什么参数,使用什么泛型类型,以及返回什么类型。它并不意味着要被执行,实际上它是您看到的编译错误的根源
具体的错误是any
应该返回bool
,但现在它返回()
(具有唯一元素的单元类型)。这一切的原因都在靠近结尾的小{}
中。这实际上是一个空函数体,如果没有返回语句或任何其他可能返回的内容,它将隐式返回()
如果您只是想让示例编译,您可以简单地删除该块(整个
pub trait…
块),因为它实际上不是示例的一部分。即使您修复了它并将其保留,示例其余部分中使用的any
无论如何也不会是此方法,而是在标准库中的realIterator
trait上定义的any
方法
pub trait Iterator {
// The type being iterated over.
type Item;
// `any` takes `&mut self` meaning the caller may be borrowed
// and modified, but not consumed.
fn any<F>(&mut self, f: F) -> bool
where
// `FnMut` meaning any captured variable may at most be
// modified, not consumed. `Self::Item` states it takes
// arguments to the closure by value.
F: FnMut(Self::Item) -> bool,
{}
}
pub特征迭代器{
//正在迭代的类型。
类型项目;
//`any`takes`&mut self`表示呼叫者可能被借用
//和修改,但不消耗。
fn任意(&mut self,f:f)->bool
哪里
//`FnMut`表示任何捕获的变量最多可以是
//已修改,未使用。`Self::Item`表示需要
//通过值为闭包添加参数。
F:FnMut(Self::Item)->bool,
{}
}
只是向您显示方法的签名。具体来说,它告诉您它接受什么参数,使用什么泛型类型,以及返回什么类型。它并不意味着要被执行,实际上它是您看到的编译错误的根源
具体的错误是any
应该返回bool
,但现在它返回()
(具有唯一元素的单元类型)。这一切的原因都在靠近结尾的小{}
中。这实际上是一个空函数体,如果没有返回语句或任何其他可能返回的内容,它将隐式返回()
如果您只是想让示例编译,您可以简单地删除该块(整个
pub trait…
块),因为它实际上不是示例的一部分。即使您修复了它并将其保留,示例其余部分中使用的any
无论如何也不会是这个,而是在标准库中的realIterator
特性上定义的any
方法。该片段旨在显示Iterator
any的外观(“其签名”)。它不在代码中。该代码片段旨在显示迭代器的any
外观(“其签名”)。它不在你的代码中。谢谢,删除迭代器的东西使它工作了。我从来没有想到会这样做。谢谢,删除迭代器的东西使它工作了。我从来没有想到会这样做。