for循环中的元组解构?
tuple destructuring in for loops?
编译并输出:i32
fn print_type_of<T>(_: &T) {
println!("{}", std::any::type_name::<T>())
}
pub fn main() {
let regions = [
// From 0xe0000 to 0xfffff
(0xe0000, 0xfffff),
];
for (start, end) in ®ions {
print_type_of(start);
}
}
这失败了
fn print_type_of<T>(_: &T) {
println!("{}", std::any::type_name::<T>())
}
pub fn main() {
let regions = [
// From 0xe0000 to 0xfffff
(0xe0000, 0xfffff),
];
// NEW
for &(start, end) in ®ions {
print_type_of(start);
}
}
和
error[E0308]: mismatched types
--> test.rs:12:27
|
12 | print_type_of(start);
| ^^^^^
| |
| expected reference, found integer
| help: consider borrowing here: `&start`
|
= note: expected reference `&_`
found type `{integer}`
为什么 for &(start, end) in ®ions
捕获 start
和 end
作为 int 值
但 for (start, end) in ®ions
作为参考?
fn print_type_of<T>(_: &T) {
println!("{}", std::any::type_name::<T>())
}
pub fn main() {
let &a = &32_i32;
let b = 32_i32;
print_type_of(&a);
print_type_of(&b);
}
输出将是:
i32
i32
在示例中,&a = &32_i32
等同于 b = 32_i32
。左边值中的&
将成为右边值的解引用,这是Destructuring Pointers的一部分。您的代码相当于:
fn print_type_of<T>(_: &T) {
println!("{}", std::any::type_name::<T>())
}
pub fn main() {
let regions = [
// From 0xe0000 to 0xfffff
(0xe0000, 0xfffff)
];
// NEW
for (start, end) in regions {
print_type_of(start);
}
}
所以(start, end) = (0xe0000, 0xfffff)
,start
的类型是i32
.
编译并输出:i32
fn print_type_of<T>(_: &T) {
println!("{}", std::any::type_name::<T>())
}
pub fn main() {
let regions = [
// From 0xe0000 to 0xfffff
(0xe0000, 0xfffff),
];
for (start, end) in ®ions {
print_type_of(start);
}
}
这失败了
fn print_type_of<T>(_: &T) {
println!("{}", std::any::type_name::<T>())
}
pub fn main() {
let regions = [
// From 0xe0000 to 0xfffff
(0xe0000, 0xfffff),
];
// NEW
for &(start, end) in ®ions {
print_type_of(start);
}
}
和
error[E0308]: mismatched types
--> test.rs:12:27
|
12 | print_type_of(start);
| ^^^^^
| |
| expected reference, found integer
| help: consider borrowing here: `&start`
|
= note: expected reference `&_`
found type `{integer}`
为什么 for &(start, end) in ®ions
捕获 start
和 end
作为 int 值
但 for (start, end) in ®ions
作为参考?
fn print_type_of<T>(_: &T) {
println!("{}", std::any::type_name::<T>())
}
pub fn main() {
let &a = &32_i32;
let b = 32_i32;
print_type_of(&a);
print_type_of(&b);
}
输出将是:
i32
i32
在示例中,&a = &32_i32
等同于 b = 32_i32
。左边值中的&
将成为右边值的解引用,这是Destructuring Pointers的一部分。您的代码相当于:
fn print_type_of<T>(_: &T) {
println!("{}", std::any::type_name::<T>())
}
pub fn main() {
let regions = [
// From 0xe0000 to 0xfffff
(0xe0000, 0xfffff)
];
// NEW
for (start, end) in regions {
print_type_of(start);
}
}
所以(start, end) = (0xe0000, 0xfffff)
,start
的类型是i32
.