迭代器查找 - 引用针而不是取消引用迭代项
iterator find - referencing the needle instead of dereferencing the iterating item
考虑以下代码:
fn main() {
let greater_than_42 = (0..100).find(|x| *x > 42);
match greater_than_42 {
Some(x) => println!("{}", x),
None => println!("no numbers found"),
}
}
如果我这样做:
let greater_than_42 = (0..100).find(|x| x > &42);
它会比较内存地址而不是值吗?
只要尝试一下就会清楚地证明事实并非如此。
在 Rust 中,原始指针(*const T
和 *mut T
)是内存地址唯一重要的地方。
引用(&T
和 &mut T
)以这种方式是透明的;如果你想比较内存地址(例如,查看两个不可变引用是否指向同一位置,尽管这在 Rust 的所有权模型中的实际应用非常有限)你需要先将它们转换为原始指针。
考虑以下代码:
fn main() {
let greater_than_42 = (0..100).find(|x| *x > 42);
match greater_than_42 {
Some(x) => println!("{}", x),
None => println!("no numbers found"),
}
}
如果我这样做:
let greater_than_42 = (0..100).find(|x| x > &42);
它会比较内存地址而不是值吗?
只要尝试一下就会清楚地证明事实并非如此。
在 Rust 中,原始指针(*const T
和 *mut T
)是内存地址唯一重要的地方。
引用(&T
和 &mut T
)以这种方式是透明的;如果你想比较内存地址(例如,查看两个不可变引用是否指向同一位置,尽管这在 Rust 的所有权模型中的实际应用非常有限)你需要先将它们转换为原始指针。