gpt4 book ai didi

kotlin - kotlin的运算符重载中plus和plusAssign有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 13:47:10 25 4
gpt4 key购买 nike

我知道plusplusAssign有一些区别,后者不能返回任何东西,但是我发现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 不能做的吗?

最佳答案

当您谈论重载时,您可以完全控制函数的作用,即使您完全交换 plusplusAssign 的实现(在 Kotlin 中是不可能的) ),甚至是 minus。尽管您可以这样做,但不建议这样做。

一般来说,plus函数应该是一个函数(没有副作用的函数),它连接两个对象并返回连接结果。它不会改变对象的值。 plusAssign 应该是一个 mutating 函数,它将左侧操作数与右侧操作数连接起来。它改变对象(左侧操作数)而不是将结果传回。

关于kotlin - kotlin的运算符重载中plus和plusAssign有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46740234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com