¿Cuál es la diferencia entre plus y plusAssign en la sobrecarga del operador de kotlin?

Sé que hay algunas diferencias entre plus y plus plusAssign , este último no puede devolver nada, pero me parece que el plus puede lograr lo que plusAssign hacer.

Una class Point sobrecarga plus y devuelve un nuevo Point .

  data class Point(var x: Int, var y: Int) { operator fun plus(other: Point): Point { return Point(x + other.x, y + other.y) } } 

Una class de Point sobrecarga con plusAssign pero no devuelve un nuevo Point .

 data class Point(var x: Int, var y: Int) { operator fun plusAssign(other: Point): Unit { this.x+=other.x this.y+=other.y } } 

Pero creo que también se puede lograr así:

 data class Point(var x: Int, var y: Int) { operator fun plus(other: Point): Point { this.x+=other.x this.y+=other.y return this; } } 

Por lo tanto, no puedo encontrar algo que haga que plusAssign especial, ¿hay algo más que plusAssign pueda hacer, pero plus no?

Cuando habla de sobrecarga, tiene control total de lo que hace la function, incluso si plusAssign completamente la implementación de plus y plus plusAssign (no posible en Kotlin), o incluso minus . Aunque se te permite hacer eso, no se sugiere.

En general, la function plus debe ser una function pura (function sin efecto secundario) que concatena dos objects y devuelve el resultado concatenado. No cambia el valor del object. plusAssign debe ser una function mutante que concatena el operando del lado izquierdo con el operando del lado derecho. Muta el object (operando del lado izquierdo) en lugar de pasar el resultado.

  • No se pueden encontrar las classs de Kotlin al comstackr IntelliJBehave
  • ¿Por qué el context no tiene el atributo de color primario de la actividad?
  • Anular setter para la variable definida en el constructor pnetworkingeterminado
  • Android: Kotlin: webView personalizado: no se puede invocar como una function. La function 'invoke ()' no se encuentra
  • Problemas henetworkingando la class interna de Java
  • Convierte el código de RxJava a Kotlin correctamente
  • ¿Es bueno que Kotlin permita la extensión de los types existentes?
  • Android Kotlin Realm Forma correcta de consultar + Actualizar Async
  • ¿Cuál es el nombre de Kotlin? operador
  • RxJava (Kotlin), Observable.amb y PublishSubject no están disparando
  • Método hashMapOf () en Kotlin