Function core::array::try_from_fn

source ·
pub fn try_from_fn<R, const N: usize, F>(
    cb: F
) -> <<R as Try>::Residual as Residual<[R::Output; N]>>::TryTypewhere
    F: FnMut(usize) -> R,
    R: Try,
    R::Residual: Residual<[R::Output; N]>,
🔬This is a nightly-only experimental API. (array_try_from_fn #89379)
Expand description

创建一个数组 [T; N],其中每个易出错的数组元素 Tcb 调用返回。 与 from_fn 的元素创建不能失败不同,如果任何元素创建失败,此版本将返回错误。

这个函数的返回类型取决于闭包的返回类型。 如果您从闭包返回 Result<T, E>,您会得到一个 Result<[T; N], E>. 如果您从闭包中返回 Option<T>,您会得到一个 Option<[T; N]>.

Arguments

  • cb: 回调,其中传入的参数是当前数组索引。

Example

#![feature(array_try_from_fn)]

let array: Result<[u8; 5], _> = std::array::try_from_fn(|i| i.try_into());
assert_eq!(array, Ok([0, 1, 2, 3, 4]));

let array: Result<[i8; 200], _> = std::array::try_from_fn(|i| i.try_into());
assert!(array.is_err());

let array: Option<[_; 4]> = std::array::try_from_fn(|i| i.checked_add(100));
assert_eq!(array, Some([100, 101, 102, 103]));

let array: Option<[_; 4]> = std::array::try_from_fn(|i| i.checked_sub(100));
assert_eq!(array, None);
Run