繁体   English   中英

如果没有特质专业化,“借用”如何运作?

[英]How does `Borrow` work without trait specialization?

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

这怎么样? 它是编译器魔术还是我误解了什么特质专业化?

简短的回答

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

答案很长

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

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>>

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM