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