Qqw*_*qwy 6 generics type-constraints rust
我一直在使用相当多的静态类型编程语言(C++、Haskell 等),但对 Rust 还比较陌生。
我经常最终编写这样的代码:
struct LeafNode<K: Ord + Default + Clone, V: Default + Clone> {
keys: Vec<K>,
values: Vec<V>,
}
impl <K: Ord + Default + Clone, V: Default + Clone> LeafNode<K, V> {
// ...
}
Run Code Online (Sandbox Code Playgroud)
这里的类型约束有很多重复。LeafNode当在其他东西中使用时(例如,在构建节点树时),情况会进一步复杂化。每当这些约束之一在实现过程中发生变化时,就有很多地方需要更改代码,因为它们在许多不同的struct定义和impl块中命名。
K: Ord + Default + Clone有没有办法从和创建某种“类型约束别名” V: Default + Clone?
如果它存在,它可能有一些我不知道的名称,这使得搜索该技术非常困难。于是就有了这个问题。
您可以通过创建自己的特征来实现此目的,该特征将其他特征作为界限,然后为其添加一个全面的实现:
trait MyConstraint: Ord + Default + Clone {}
impl <T: Ord + Default + Clone> MyConstraint for T {}
struct LeafNode<K: MyConstraint> {
keys: Vec<K>
}
impl<K: MyConstraint> LeafNode<K> {
fn keys(&self) -> &[K] {
&self.keys
}
}
Run Code Online (Sandbox Code Playgroud)