Generics 锈病:泛型中的部分特征
我试图写一些基本的泛型:Generics 锈病:泛型中的部分特征,generics,rust,Generics,Rust,我试图写一些基本的泛型: pub struct MyGeneric<T> { vec: Vec<T> } impl<T> MyGeneric<T> { fn add(&mut self, item: T) { if !self.vec.contains(&item) { self.vec.push(item); } } } 我试图通过多种方式实现Pa
pub struct MyGeneric<T> {
vec: Vec<T>
}
impl<T> MyGeneric<T> {
fn add(&mut self, item: T) {
if !self.vec.contains(&item) {
self.vec.push(item);
}
}
}
我试图通过多种方式实现PartialEq,查看API文档,但我自己没有找到解决方案。我对traits的概念不是很熟悉,所以我需要帮助
谢谢。您需要将
T
的所有可能值限制为实现PartialEq
的值,因为Vec::contains()的定义要求:
pub struct MyGeneric<T> {
vec: Vec<T>
}
// All you need is to add `: PartialEq` to this impl
// to enable using `contains()`
impl<T: PartialEq> MyGeneric<T> {
fn add(&mut self, item: T) {
if !self.vec.contains(&item) {
self.vec.push(item);
}
}
}
fn main()
{
let mut mg: MyGeneric<int> = MyGeneric { vec: Vec::new() };
mg.add(1);
}
pub结构MyGeneric{
vec:vec
}
//您只需将`:PartialEq`添加到此impl
//要启用“contains”()`
impl-MyGeneric{
fn添加(&mut自我,项目:T){
if!self.vec.包含(&item){
自我向量推送(项目);
}
}
}
fn main()
{
让mut-mg:MyGeneric=MyGeneric{vec:vec::new()};
mg.添加(1);
}
泛型类型在大多数情况下都需要在其参数上指定一些界限,否则将无法验证泛型代码是否正确。例如,这里,contains()
正在对项使用运算符=
,但并非每种类型都定义了该运算符。标准traitPartialEq
定义了操作符=
,因此实现该trait的所有东西都保证有该操作符。您可以扩展示例代码吗?我想我已经开始理解了,但不是很确定。@bender.rodriges我已经包含了在Rust 0.11中编译的最小示例。现在我明白了!我确实认为那个符号意味着派生。一直以来,我都试图像fmt::Show trait那样实现它。非常感谢。
pub struct MyGeneric<T> {
vec: Vec<T>
}
// All you need is to add `: PartialEq` to this impl
// to enable using `contains()`
impl<T: PartialEq> MyGeneric<T> {
fn add(&mut self, item: T) {
if !self.vec.contains(&item) {
self.vec.push(item);
}
}
}
fn main()
{
let mut mg: MyGeneric<int> = MyGeneric { vec: Vec::new() };
mg.add(1);
}