编者注:此代码示例来自1.0之前的Rust版本,在语法上不是有效的Rust 1.0代码。此代码的更新版本会产生不同的错误,但是答案仍然包含有价值的信息。
在以下情况下,我们似乎无法测试是否相等。为什么是这样?有解决方法吗?(我正在使用Rust 0.11)。
trait A: PartialEq {}
#[deriving(PartialEq)]
enum T {Ta, Tb}
impl A for T {}
fn main() {
assert!(Ta == Ta);
assert!(Ta != Tb);
assert!(some_fn(&Ta, &Ta));
assert!(!some_fn(&Ta, &Tb));
}
fn some_fn(an_a: &A, another_a: &A) -> bool {
an_a == another_a
// ERROR ^~~~~~~~~~~~ binary operation `==` cannot be applied to type `&A`
}
fn another_fn(an_a: &A + PartialEq, another_a: &A + PartialEq) -> bool {
// ERROR: ^~~~~~~~~ only the builtin traits can be used as closure or object bounds
an_a == another_a
}
DIEA
小怪兽爱吃肉