讲师中心 微信公众号

工具推荐

视频效率加速
立刻MV
立刻MV

低成本歌曲 MV、视频生成

updream

一键生成高质量推广成片

AniShort
AniShort

AI短剧协同制作平台

Seko
Seko

AI短剧一键生成成片

Rust 教程

浏览27988
更新时间2025-08-27

在本章中,我们将学习迭代器和闭包在 RUST 中的工作原理。

迭代器

迭代器有助于迭代数组、向量、映射等值的集合。迭代器实现了 Rust 标准库中定义的迭代器特征。 iter() 方法返回集合的迭代器对象。 迭代器对象中的值称为项目。 迭代器的 next() 方法可用于遍历项目。 next() 方法在到达集合末尾时返回值 None。

以下示例使用迭代器从数组中读取值。

fn main() {
   //声明一个数组
   let a = [10,20,30];

   let mut iter = a.iter(); 
   // 获取数组的迭代器对象
   println!("{:?}",iter);

   //从迭代器对象中获取单个值
   println!("{:?}",iter.next());
   println!("{:?}",iter.next());
   println!("{:?}",iter.next());
   println!("{:?}",iter.next());
}

输出

Iter([10, 20, 30])
Some(10)
Some(20)
Some(30)
None

如果像数组或 Vector 这样的集合实现了 Iterator 特征,那么可以使用 for...in 语法来遍历它,如下所示 -

fn main() {
   let a = [10,20,30];
   let iter = a.iter();
   for data in iter{
      print!("{}\t",data);
   }
}

输出

10 20 30

以下 3 个方法从集合中返回迭代器对象,其中 T 表示集合中的元素。

Sr.No 方法与描述
1

iter()

给出 &T 上的迭代器(对 T 的引用)

2

into_iter()

给出 T 上的迭代器

3

iter_mut()

给出 &mut T 上的迭代器

Illustration:iter()

iter() 函数使用借用的概念。 它返回对集合中每个元素的引用,使集合保持不变并可在循环后重用。

fn main() {
   let names = vec!["Kannan", "Mohtashim", "Kiran"];
   for name in names.iter() {
      match name {
         &"Mohtashim" => println!("There is a rustacean among us!"),
         _ => println!("Hello {}", name),
      }
   }
   println!("{:?}",names); 
   // 迭代后重用集合
}

输出

Hello Kannan
There is a rustacean among us!
Hello Kiran
["Kannan", "Mohtashim", "Kiran"]

示例 - into_iter()

该函数使用所有权的概念。 它将集合中的值移动到 iter 对象中,即集合被消耗并且不再可重用。

fn main(){
   let names = vec!["Kannan", "Mohtashim", "Kiran"];
   for name in names.into_iter() {
      match name {
         "Mohtashim" => println!("There is a rustacean among us!"),
         _ => println!("Hello {}", name),
      }
   }
   // 迭代后无法重用集合
   // println!("{:?}",names); 
   // Error:Cannot access after ownership move
}

输出

Hello Kannan
There is a rustacean among us!
Hello Kiran

示例 - for 和 iter_mut()

这个函数类似于iter()函数。 但是,此函数可以修改集合中的元素。

fn main() {
   let mut names = vec!["Kannan", "Mohtashim", "Kiran"];
   for name in names.iter_mut() {
      match name {
         &mut "Mohtashim" => println!("There is a rustacean among us!"),
         _ => println!("Hello {}", name),
      }
   }
   println!("{:?}",names);
   //// 迭代后重用集合
}

输出

Hello Kannan
There is a rustacean among us!
Hello Kiran
["Kannan", "Mohtashim", "Kiran"]

闭包

闭包是指一个函数包含在另一个函数中。 这些是匿名函数——没有名称的函数。 闭包可用于将函数分配给变量。 这允许程序将函数作为参数传递给其他函数。 闭包也称为内联函数。 外部函数中的变量可以通过内联函数访问。

语法:定义闭包

闭包定义可以选择包含参数。 参数包含在两个竖线内。

let closure_function = |parameter| {
   //logic
}

调用闭包的语法实现 Fn 特征。 因此,可以使用 () 语法调用它。

closure_function(parameter);    //调用

示例

以下示例在函数 main() 中定义了一个闭包 is_even。 如果数字是偶数,则闭包返回 true;如果数字是奇数,则闭包返回 false。

fn main(){
   let is_even = |x| {
      x%2==0
   };
   let no = 13;
   println!("{} is even ? {}",no,is_even(no));
}

输出

13 is even ? false

示例

fn main(){
   let val = 10; 
   // 对外声明
   let closure2 = |x| {
      x + val // 内部函数访问外部 fn 变量
   };
   println!("{}",closure2(2));
}

main()函数声明一个变量val和一个闭包。 闭包访问在外部函数 main() 中声明的变量。

输出

12

精品课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时 | 65.3万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时 | 41.5万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时 | 77.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn