如何从 Rust 的 Option 中获取切片?

Cha*_*Rex 19 slice rust

我有一个OptionRust,我需要在接受切片的函数中使用它。如何从OptionwhereSome(x)的切片有一个元素而 的None切片有零个元素中获取切片?

Cha*_*Rex 23

Rust 1.75 及更高版本

Option现在标准库中有as_slice和方法。as_mut_slice

Rust 1.75 之前

这将产生一个不可变的切片Option

the_option.as_ref()
    .map(core::slice::from_ref)
    .unwrap_or_default()
Run Code Online (Sandbox Code Playgroud)

这将产生一个可变切片Option

the_mutable_option.as_mut()
    .map(core::slice::from_mut)
    .unwrap_or_default()
Run Code Online (Sandbox Code Playgroud)

第一个使用Option's as_reforas_mut方法来生成第二个Option,其中包含对仍位于原始值内的值的引用Option

然后,他们使用Optionsmap方法,如果第二个OptionSome值,则将core::slice::from_refcore::slice::from_mut应用于该值内的引用Some,将其更改为单元素切片。

然后,它使用第二个OptionusingOption方法unwrap_or_default。如果它是一个Some值,则会生成上一步中的单元素切片。否则,如果它是一个None值,则会生成默认切片,它是一个空切片


Joe*_*gyu 9

您可以使用两个函数:opt_sliceopt_slice_mut ,由板条箱ref_slice提供

pub fn opt_slice<A>(opt: &Option<A>) -> &[A]
pub fn opt_slice_mut<A>(opt: &mut Option<A>) -> &mut [A]
Run Code Online (Sandbox Code Playgroud)