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()
}