Rust:for循环中的显式类型定义语法

时间:2017-11-19 12:56:16

标签: for-loop syntax rust type-inference

Rust允许在变量声明中显式类型定义(尽管由于某些原因似乎很少使用这种语法)。例如。此类声明有效:

let number: i32 = 10;
let (tuple_value1, tuple_value2): (i32, String) = (10, String::from("Text"));
let (numeric_value, bytes): (i32, &[u8]) = (10, tuple_value2.as_bytes());

但是如何在for循环中显式定义变量类型?我目前正在研究The Rust Programming Language本书的chapter 4.3。我正在尝试在清单4-10中的for循环中的变量声明中应用类型定义:

fn first_word(s: &String) -> usize {
    let bytes = s.as_bytes();

    for (i, &item) in bytes.iter().enumerate() {
        if item == b' ' {
            return i;
        }
    }

    s.len()
}

然而,在尝试使用类型定义

提供所提及的列表的for循环时
fn first_word(s: &String) -> usize {
    let bytes: &[u8] = s.as_bytes();

    for (i, item): (usize, std::iter::Enumerate<std::slice::Iter<u8>>) in bytes.iter().enumerate() {
        if item == b' ' {
            return i;
        }
    }

    s.len()
}

我明白了:

error: expected `in`, found `:`
 --> src/main.rs:7:15
  |
7 |     for (i, item): (usize, &[u8]) in bytes.iter().enumerate() {
  |                  ^ expected `in` here

error[E0308]: mismatched types
  --> src/main.rs:4:36
   |
4  |   fn first_word(s: &String) -> usize {
   |  ____________________________________^
5  | |  let bytes: &[u8] = s.as_bytes();
6  | |
7  | |  for (i, item): (usize, &[u8]) in bytes.iter().enumerate() {
...  |
13 | |  s.len()
14 | | }
   | |_^ expected usize, found ()
   |
   = note: expected type `usize`
              found type `()`

error: aborting due to 2 previous errors

error: Could not compile `hello_world`.

到目前为止,本书不包含如何在循环中执行显式类型定义的描述。所以对我来说谷歌搜索。我的问题是关于for循环中正确的类型定义语法(如果存在,我非常希望如此)。

0 个答案:

没有答案