调用is_null()感觉有点奇怪: fn do_stuff(ptr: *const i32) -> Option<i32> { if ptr.is_null() { None } else { Some(do_transform(*ptr, 42)) } }
自 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)) }
as_ref
和as_mut
。 - user395760