簡體   English   中英

Rust:特征內的類型引用

[英]Rust: type reference within trait

我想實現自己的通用容器,這是我正在使用的特征的片段:

pub trait MyVec
where
    Self: Default + Clone + IntoIterator,
    Self: std::iter::FromIterator<<Self as IntoIterator>::Item>,
{
    fn get(self: &Self, index: usize) -> <Self as IntoIterator>::Item;

    // many other methods are omitted.
}

是否可以引入一個新的計算類型變量,這樣我就可以避免在任何地方輸入<Self as IntoIterator>::Item 一個簡單的type Item = <Self as IntoIterator>::Item不起作用,因為這是一個可能被覆蓋的關聯類型。 使用類型參數作為MyVec<I>也不起作用,因為我不想用不同的I類型為同一個結構實現這個特性,並且在以后編寫通用代碼時也會導致問題。 有什么建議嗎?

我不認為你可以在trait中定義一個type作為實現者然后可以自定義這個類型。

但是你可以在特征之外引入一個類型別名:

pub type IntoIterItem<T> = <T as IntoIterator>::Item;

pub trait MyVec : 
    Default
    + Clone
    + IntoIterator
    + std::iter::FromIterator<IntoIterItem<Self>>
{
    fn get(self: &Self, index: usize) -> IntoIterItem<Self>;
}

或者,作為 hack,您可以嘗試MyVec<I> ,但使用默認值I

pub trait MyVec<Item=<Self as IntoIterator>::Item> : 
    Default
    + Clone
    + IntoIterator
    + std::iter::FromIterator<Item>
{
    fn get(self: &Self, index: usize) -> Item;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM