文档没有说明如何进行,本教程完全忽略了for循环.

推荐答案

从1.0开始,for个循环使用Iterator trait的类型值.

这本书在chapter 3.5chapter 13.2中描述了这种技术.

如果您对for循环的操作方式感兴趣,请参阅100中描述的语法糖.

例子:

fn main() {
    let strs = ["red", "green", "blue"];

    for sptr in strs.iter() {
        println!("{}", sptr);
    }
}

(Playground)

如果您只想在一个数字范围内进行迭代,如在C的for循环中,可以使用a..b语法创建一个数字范围:

for i in 0..3 {
    println!("{}", i);
}

如果同时需要索引和数组中的元素,通常的方法是使用Iterator::enumerate方法:

fn main() {
    let strs = ["red", "green", "blue"];

    for (i, s) in strs.iter().enumerate() {
        println!("String #{} is {}", i, s);
    }
}

笔记:

  • 循环项是对iteratee元素的borrow 引用.在本例中,strs的元素具有&'static str类型——它们是指向静态字符串的borrow 指针.这意味着sptr&&'static str类型,所以我们将其解引用为*sptr.我更喜欢的另一种形式是:

      for &s in strs.iter() {
          println!("{}", s);
      }
    

Rust相关问答推荐

Box::new()会从一个堆栈复制到另一个堆吗?

如何格式化传入Rust中mysql crate的Pool::new的字符串

为什么TcpListener的文件描述符和生成的TcpStream不同?

用于实现获取 struct 体 id 的特征规范

&'a T 是否意味着 T: 'a?

try 实现线程安全的缓存

Rust 中的内存管理

如何限制通用 const 参数中允许的值?

错误:将自定义 proc_macro 与用Rust 的宝贝编写的属性一起使用时,无法在此范围内找到属性

如何判断服务器是否正确接收数据

哪些特征通过 `Deref` 而哪些不通过?

如何使返回 XMLError 的方法与 anyhow::Error 兼容?

只有一个字符被读入作为词法分析器的输入

用逗号分隔字符串,但在标记中使用逗号

将文件的第一行分别读取到文件的其余部分的最有效方法是什么?

为什么可以从闭包中返回私有 struct

如何在 Rust 的内置函数上实现特征?

list 中没有指定目标 - 必须存在 src/lib.rs、src/main.rs、[lib] 部分或 [[bin]] 部分

在同一向量 Rust 中用另一个字符串扩展一个字符串

如何从 Rust 应用程序连接到 Docker 容器中的 SurrealDB?