gpt4 book ai didi

rust - `Borrow` 在没有特征特化的情况下如何工作?

转载 作者:行者123 更新时间:2023-11-29 07:46:40 24 4
gpt4 key购买 nike

目前,Rust 还没有“特质特化”的特性。据我了解,这意味着对于一个给定的类型,一个特性不能被实现多次。但是,我注意到 Borrow trait已实现for T where T: ?Sized这些都是非引用类型(对吗?)。但它也适用于其他几种类型,例如 Vec<T> ,这看起来像是一个专业。

它是如何工作的?是编译器魔术还是我误解了什么是特征特化?

最佳答案

简答

在这种情况下,特征特化不是必需的,因为实现是非重叠的。

长答案

Vec<T> 的特殊情况下,有许多适用于它的暗示。例如,以下内容:

impl<T> Borrow<T> for T where T: ?Sized
impl<'a, T> Borrow<T> for &'a T where T: ?Sized
impl<'a, T> Borrow<T> for &'a mut T where T: ?Sized
// other implementations are omitted for conciseness

根据这些实现,编译器可以推导出以下内容:

  1. Vec<T>工具 Borrow<Vec<T>>
  2. &'a Vec<T>工具 Borrow<Vec<T>>
  3. &'a mut Vec<T>工具 Borrow<Vec<T>>

但是,它们都没有实现 Borrow<[T]>对于 Vec<T> .由于未提供该实现,您可以自由提供自己的实现:

impl<T> Borrow<[T]> for Vec<T>

关于rust - `Borrow` 在没有特征特化的情况下如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33334135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com