[英]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
根據這些實現,編譯器可以推斷出以下內容:
Vec<T>
實現Borrow<Vec<T>>
&'a Vec<T>
實現Borrow<Vec<T>>
&'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.