Что я хочу сделать, это получить черту, но только для определенных вариантов, а не для всего перечисления.Это возможно?(или это вообще имеет смысл?).
Это на самом деле не имеет смысла.
Черты реализованы для типов .Перечисление - это тип, а его варианты - его значения.Ваш вопрос эквивалентен вопросу о том, можете ли вы реализовать черту для некоторых String
с, но не для других.
Если для неподдерживаемых вариантов допустимо всегда возвращать false
, аналогично тому, как f32
PartialEq
реализация возвращает false
всякий раз, когда вы сравниваете значение NaN
, тогда вы можете написать это значение вручную:
impl PartialEq for MyEnum {
fn eq(&self, other: &MyEnum) -> bool {
use MyEnum::*;
match (self, other) {
// VariantA and VariantB are supported
(VariantA(value), VariantA(other_value)) => value == other_value,
(VariantB(value), VariantB(other_value)) => value == other_value,
// Any other combinations of variants end up here
_ => false,
}
}
}
Обратите внимание, что вы должны , а не внедрить Eq
таким образом, поскольку реализации Eq
можно считать равными total , что не является.