在Rust中,是否可能与空指针进行匹配?

12

调用is_null()感觉有点奇怪:

fn do_stuff(ptr: *const i32) -> Option<i32> {
    if ptr.is_null() {
        None
    } else {
        Some(do_transform(*ptr, 42))
    }
}
1个回答

25
自 Rust 1.9 起,有一个as_ref函数,它将原始指针转换为一个Option<&T>,以及可变的变体as_mut
你的代码应该类似于
fn do_stuff(ptr: *const i32) -> Option<i32> {
    let ptr = unsafe { ptr.as_ref() };
    ptr.map(|x| do_transform(x, 42))
}

7
刚刚发布了 1.9 版本,稳定了 as_refas_mut - user395760
11
@delnan,我认为这是一个记录。我发布答案后30分钟,它就过时了,因为语言本身已经更新了……而且我绝对查看了文档以确认它是不稳定的!^_^ - Shepmaster
10
这也是一种记录方式:Florian提出一个问题,30分钟后该功能已经被实现且稳定:D - Matthieu M.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接