我有很多型別限制,我想讓它更具可讀性。例如,有沒有辦法簡化這個:
<P: Serialize Clone Eq std::hash::Hash std::fmt::Display, E: Serialize Clone Eq std::hash::Hash std::fmt::Display>
我可以以某種方式洗掉這個重復,也許用一個where宣告來使它像這樣:
where P E: Serialize Clone Eq std::hash::Hash std::fmt::Display
把它放得這么大似乎是錯誤的。
uj5u.com熱心網友回復:
目前沒有任何方法可以像您希望的那樣組合型別約束。但是,您至少可以通過定義自己的特征和一攬子實作來稍微整合樣板,如下所示:
trait Data: Serialize Clone Eq std::hash::Hash std::fmt::Display {}
impl<T> Data for T where T: Serialize Clone Eq std::hash::Hash std::fmt::Display {}
這將允許您撰寫這樣的型別約束:
where P: Data, E: Data
請注意,原始型別約束仍然必須在 trait 定義和實作上復制,以確保 1. 實作 trait 的型別也公開必要的行為,并且 2. 實作僅適用于實作必要 trait 的型別。
這是操場上的一個例子。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/351391.html
上一篇:根據數字為另一列著色行
