“TryFrom<&[T]>”和“TryFrom<Vec<T>>”有什么区别?

5

似乎有两种方法可以将向量转换为数组,一种是通过切片(fn a),另一种是直接转换(fn b):

use std::array::TryFromSliceError;
use std::convert::TryInto;

type Input = Vec<u8>;
type Output = [u8; 1000];

// Rust 1.47
pub fn a(vec: Input) -> Result<Output, TryFromSliceError> {
    vec.as_slice().try_into()
}

// Rust 1.48
pub fn b(vec: Input) -> Result<Output, Input> {
    vec.try_into()
}

实际上,它们之间有什么区别?只是错误类型吗?后者被添加的事实让我想知道是否有更多原因。
1个回答

10

它们的行为略有不同。

从切片到数组的实现将会 复制 切片中的元素。由于切片没有 拥有 这些元素,所以必须进行复制而不是 移动

Vec 到数组的实现将会 消耗 Vec 并将其内容 移动 到新的数组中。这是因为 Vec 拥有这些元素。


值得注意的是,对于Vec到数组的实现,在失败时它会将输入数组作为错误返回。 - harmic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接