Реализация AddAssign
действительно необходима для работы оператора +=
.
Решение о том, следует ли реализовать эту черту, будет в значительной степени зависеть от фактического типа и типа семантикичто вы стремитесь.Это относится к любому типу вашего собственного изготовления, включая новые типы.Наиболее важным из них является предсказуемость : реализация должна вести себя так, как ожидается от той же математической операции.В этом случае, учитывая, что сложение через Add
уже хорошо определено для этого типа, и ничто не мешает вам реализовать эквивалентную операцию на месте, а затем добавить impl
из AddAssign
какэто самое предсказуемое.
impl AddAssign for NanoSecond {
fn add_assign(&mut self, other: Self) {
self.0 += other.0
}
}
Можно также выбрать дополнительные реализации для ссылочных типов в качестве второго операнда (например, Add<&'a Self>
и AddAssign<&'a Self>
).
Обратите внимание, что в Clippy есть строки, которые проверяют правильность выполнения арифметической операции (suspicious_arithmetic_impl
и suspicious_op_assign_impl
).Как часть предсказуемости, черта должна вести себя почти так же, как и соответствующая математическая операция, независимо от того, был ли использован +
или +=
.Насколько мне известно, в настоящее время нет ни единого стандарта или руководства по API, предлагающего реализовать черты -Assign
вместе с соответствующей операцией.