Rust TryFrom<&;[T] >;和TryFrom<;Vec<;T>>;?

Rust TryFrom<&;[T] >;和TryFrom<;Vec<;T>>;?,rust,Rust,似乎有两种方法可以尝试将向量转换为数组,一种是通过切片(fn a),另一种是直接(fn b): 使用std::array::TryFromSliceError; 使用std::convert::TryInto; 类型输入=Vec; 类型输出=[u8;1000]; //锈1.47 发布fn a(向量:输入)->结果{ vec.as_slice()。尝试使用 } //锈1.48 发布fn b(向量:输入)->结果{ vec.try_进入() } 实际上,这两者有什么区别?这只是错误类型吗?添加了后

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

使用std::array::TryFromSliceError;
使用std::convert::TryInto;
类型输入=Vec;
类型输出=[u8;1000];
//锈1.47
发布fn a(向量:输入)->结果{
vec.as_slice()。尝试使用
}
//锈1.48
发布fn b(向量:输入)->结果{
vec.try_进入()
}

实际上,这两者有什么区别?这只是错误类型吗?添加了后者这一事实让我想知道是否还有其他原因。

他们的行为略有不同

切片到数组将从切片复制元素。它必须复制而不是移动,因为切片不拥有元素


Vec
to数组将使用
Vec
并将其内容移动到新数组。它可以这样做,因为它确实拥有元素。

还值得注意的是,对于
Vec
to-array实现,如果失败,它将返回输入数组作为错误。
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()
}