迭代器查找 - 引用针而不是取消引用迭代项

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 的所有权模型中的实际应用非常有限)你需要先将它们转换为原始指针。