我如何从 Rust 中的选项中获取切片?

How can I get a slice from an Option in Rust?

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

这将生成 Option:

的不可变切片
the_option.as_ref()
    .map(core::slice::from_ref)
    .unwrap_or_default()

这将生成 Option:

的可变切片
the_mutable_option.as_mut()
    .map(core::slice::from_mut)
    .unwrap_or_default()

这些首先使用 Optionas_ref or as_mut 方法生成第二个 Option,其中包含对仍在原始 Option 中的值的引用。

然后,他们使用 Optionmap method, which, if the second Option is a Some value, applies core::slice::from_ref or core::slice::from_mutSome 值内的引用,将其更改为单元素切片。

然后,它使用 Optionunwrap_or_default method. If it's a Some value, the one-element slice from the previous step is produced. Otherwise, if it's a None value, the default slice is produced, which is an empty slice 消耗第二个 Option

您可以使用两个函数:opt_slice and opt_slice_mut, provided by the crate ref_slice

pub fn opt_slice<A>(opt: &Option<A>) -> &[A]
pub fn opt_slice_mut<A>(opt: &mut Option<A>) -> &mut [A]

Option支持IntoIterator,所以

let v = opt.into_iter().collect::<Vec<_>>()

给你一个包含 0 或 1 个元素的 Vec,可以将其传递给你的函数,因为 Vec<T> 实现了 Deref<T>.