Ich überladen (oder vielleicht in diesem Fall implementieren) den Operator + = für eine Klasse (keine Struktur!). Die Operation ändert den Status der Instanz auf der linken Seite. Ich habe bemerkt, dass ich das linksseitige Element mit let
ohne Fehler deklarieren kann (und da es sich um eine Instanz einer Klasse handelt, ändert sich ihr interner Zustand mit der Operation). Dies ist natürlich unerwünscht und sollte zu einem Kompilierzeitfehler führen. Gibt es eine Möglichkeit, den überladenen Operator für das Element auf der linken Seite zu mutieren?Überladenen + = Operator als mutieren deklarieren?
class MyClass {
static func +=(lhs: MyClass, rhs: MyClass) {
lhs.fu(rhs) // fu() changes internal state of lhs
}
}
let a = MyClass()
let b = MyClass()
a += b // this is legal but shouldn't be, since instance 'a' will
// have a different internal state after the concatenation