我知道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)
}
}
Run Code Online (Sandbox Code Playgroud)
一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
}
}
Run Code Online (Sandbox Code Playgroud)
但我发现它也可以像这样实现:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
所以,我找不到plusAssign特别的东西,有什么plusAssign可以做但却plus不能吗?
当你谈论重载时,你可以完全控制函数的功能,即使你完全交换了实现plus和plusAssign(在Kotlin中不可能),甚至是minus.虽然您被允许这样做,但不建议这样做.
通常,plus函数应该是一个纯函数(没有副作用的函数),它连接两个对象并返回连接结果.它不会更改对象的值.plusAssign应该是一个变异函数,它将左侧操作数与右侧操作数连接起来.它会改变对象(左侧操作数)而不是将结果传回.
| 归档时间: |
|
| 查看次数: |
767 次 |
| 最近记录: |