¿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.

  • Kotlin zipToda alternativa
  • Errores de data binding en el module de la aplicación
  • Mostrar cambios de altura de los artículos cuando se establece la image del artículo
  • Por qué var foo = null comstack
  • MediaStore.Images get image completa desde el pulgar Uri / id
  • Convierta GsonBuilder en Kotlin
  • Situaciones razonables para usar el `let` de Kotlin
  • Kotlin - ¿Cómo hacer onCompleteListener para get datos de Firestre?
  • Android Studio / Kotlin: Error de Gradle: no se puede encontrar el método compile () para los arguments
  • ¿Hay alguna manera de hacer un cajón con tres estados?
  • Llamar al método de una class como arg por defecto en el constructor