我知道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
不能做什么?
答案 0 :(得分:9)
当你谈论重载时,你可以完全控制函数的功能,即使你完全交换了plus
和plusAssign
的实现(在Kotlin中不可能),甚至{{ 1}}。虽然你被允许这样做,但不建议这样做。
通常,minus
函数应该是纯函数(没有副作用的函数),它连接两个对象并返回连接结果。它不会更改对象的值。 plus
应该是 mutating 函数,它将左侧操作数与右侧操作数连接起来。它会改变对象(左侧操作数),而不是将结果传回。