gpt4 book ai didi

for-loop - 元组在for循环中被破坏了吗?

转载 作者:行者123 更新时间:2023-12-03 11:44:26 24 4
gpt4 key购买 nike

编译并输出: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 &regions {
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 &regions {
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 &regionsstartend捕获为一个int值
但是 for (start, end) in &regions作为引用?

最佳答案

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

关于for-loop - 元组在for循环中被破坏了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64732701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com