rust - TryFrom<&[T]> 和 TryFrom<Vec<T>> 有什么区别?

标签 rust

似乎有两种方法可以尝试将向量转换为数组,通过切片( 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()
}
实际上,它们之间有什么区别?它只是错误类型吗?添加后者的事实让我想知道是否还有更多内容。

最佳答案

它们的行为略有不同。
切片到数组 implementation将从切片中复制元素。它必须复制而不是移动,因为切片不拥有元素。Vec到阵列 implementation将消耗 Vec并将其内容移动到新数组。它可以这样做,因为它确实拥有这些元素。

关于rust - TryFrom<&[T]> 和 TryFrom<Vec<T>> 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65209340/

相关文章:

rust - 如何在不复制的情况下将借用结构的装箱成员传递给函数?

rust - 创建特征对象的副本

rust - 为什么我的自定义格式化程序实现忽略了宽度?

rust - 链接到其他库时是否可以将单个rust文件作为脚本运行而无需生成 cargo 项目

rust - 我可以将 Rust 文档测试的一部分外部化到外部文件吗?

rust - 整个Box都可以 move 时,Box可以 move 其内容吗?

error-handling - 如何在 rust 中使用if else方法获取错误?

generics - Rust 泛型 : Expected <T> found <Foo>

rust - 自有指针移动的语义

rust - 如何允许弃用的功能?