【发布时间】:2015-01-29 06:05:36
【问题描述】:
我来自 C(在较小程度上是 C++)背景。我写了如下代码sn-p:
fn main() {
let my_array = [1, 2, 3];
let print_me = |j| println!("= {}", j);
for k in my_array.iter() {
print_me(k);
}
}
这按预期编译并运行,但随后我指定了传递给闭包 print_me 的参数类型,因此:
fn main() {
let my_array = [1, 2, 3];
let print_me = |j: i32| println!("= {}", j);
for k in my_array.iter() {
print_me(k);
}
}
我得到一个编译错误:
error[E0308]: mismatched types
--> src/main.rs:6:22
|
6 | print_me(k);
| ^
| |
| expected i32, found &{integer}
| help: consider dereferencing the borrow: `*k`
|
= note: expected type `i32`
found type `&{integer}`
现在这让我很困惑,直到我在 for 语句中将 k 更改为 &k,效果很好:
fn main() {
let my_array = [1, 2, 3];
let print_me = |j: i32| println!("= {}", j);
for &k in my_array.iter() {
print_me(k);
}
}
似乎我误解了for 语法本身——或者可能是迭代器的确切工作方式——或者可能是引用相对于指针的使用语法[在 C++ 中相关但不同] .
在构造 for A in B { C1; C2; ... Cn } 中,A 和 B 究竟应该是什么?
【问题讨论】:
标签: for-loop reference iterator rust