目前,Rust还没有"特质专业化"功能.据我所知,这意味着对于一种给定类型,特征不能多次实现.然而,我注意到,Borrow特点是实现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
Run Code Online (Sandbox Code Playgroud)
根据这些实现,编译器可以推断出以下内容:
Vec<T> 器物 Borrow<Vec<T>>&'a Vec<T> 器物 Borrow<Vec<T>>&'a mut Vec<T> 器物 Borrow<Vec<T>>然而,他们没有实现Borrow<[T]>的Vec<T>.由于未提供该实施,您可以自由提供:
impl<T> Borrow<[T]> for Vec<T>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |