Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
rust by example:闭包迭代器any给出E0308_Rust - Fatal编程技术网

rust by example:闭包迭代器any给出E0308

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 ) {

我一直在用示例书的代码来测试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 )
  {
    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
无论如何也不会是此方法,而是在标准库中的real
Iterator
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
无论如何也不会是这个,而是在标准库中的real
Iterator
特性上定义的
any
方法。

该片段旨在显示
Iterator
any的外观(“其签名”)。它不在代码中。该代码片段旨在显示迭代器的
any
外观(“其签名”)。它不在你的代码中。谢谢,删除迭代器的东西使它工作了。我从来没有想到会这样做。谢谢,删除迭代器的东西使它工作了。我从来没有想到会这样做。