我知道plus
和plusAssign
之间有一些区别,后者无法返回任何内容,但是我发现plus
可以实现plusAssign
所做的事情。Point
类重载plus
并返回新的Point
。
data class Point(var x: Int, var y: Int)
{
operator fun plus(other: Point): Point
{
return Point(x + other.x, y + other.y)
}
}
Point
类重载plusAssign
,但不返回新的Point
。data class Point(var x: Int, var y: Int)
{
operator fun plusAssign(other: Point): Unit
{
this.x+=other.x
this.y+=other.y
}
}
但我发现也可以这样实现:
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;
}
}
所以,我找不到使
plusAssign
变得特别的东西,plusAssign
能做些什么,但是plus
无法做些什么吗? 最佳答案
在谈论重载时,您可以完全控制该函数的功能,甚至完全交换plus
和plusAssign
(在Kotlin中是不可能的)甚至minus
的实现。尽管可以这样做,但不建议这样做。
通常,plus
函数应该是一个纯函数(无副作用的函数),该函数将两个对象串联起来并返回串联的结果。它不会更改对象的值。 plusAssign
应该是变异函数,它将左侧操作数与右侧操作数连接在一起。它使对象(左侧操作数)发生突变,而不是将结果传递回去。
关于kotlin - kotlin的运算符重载中plus和plusAssign有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46740234/