我如何从 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()
这些首先使用 Option
的 as_ref
or as_mut
方法生成第二个 Option
,其中包含对仍在原始 Option
中的值的引用。
然后,他们使用 Option
的 map
method, which, if the second Option
is a Some
value, applies core::slice::from_ref
or core::slice::from_mut
到 Some
值内的引用,将其更改为单元素切片。
然后,它使用 Option
的 unwrap_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>
.
我在 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()
这些首先使用 Option
的 as_ref
or as_mut
方法生成第二个 Option
,其中包含对仍在原始 Option
中的值的引用。
然后,他们使用 Option
的 map
method, which, if the second Option
is a Some
value, applies core::slice::from_ref
or core::slice::from_mut
到 Some
值内的引用,将其更改为单元素切片。
然后,它使用 Option
的 unwrap_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>
.