2015-01-22 2 views
6

Как использовать сложные операторы типа «+ =» с настраиваемыми типами?Как я могу перегрузить оператор + = "плюс равно"?

Перегрузка некоторых основных операторов возможна путем реализации Add, Sub, etc. Но, похоже, нет никакой поддержки для +=, ни x += y автоматически интерпретируется как x = x + y (начиная с 1.0 alpha release).

ответ

7

В настоящее время поддерживается AddAssign (SubAssign, MulAssign ... и т. Д.).

Это базовый пример:

use std::ops::{Add, AddAssign}; 
struct Float2(f64, f64); 

impl AddAssign for Float2 { 
    fn add_assign(&mut self, rhs: Float2) { 
     self.0 += rhs.0; 
     self.1 += rhs.1; 
    } 
} 
5

Вы не можете в данный момент, но это определенно что-то очень нужно. Покрытие RFC issue #393.

Очень давно x += y был реализован как x = x + y, но в нем всегда были ошибки. Я не думаю, что в то время были какие-то фундаментальные проблемы с этим подходом, но теперь я думаю, что переход к признакам оператора, использующим аргументы по-значению, делает работу по снижению шума более эффективной.

+0

Этот ответ был правильным в то время, но с тех пор было реализовано. Добавлен собственный ответ. – ideasman42

Смежные вопросы