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
循环中正确的类型定义语法(如果存在,我非常希望如此)。