Примечание редактора: Этот пример кода относится к версии Rust до 1.0 и не является синтаксически корректным кодом 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
}