我知道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应该是变异函数,它将左侧操作数与右侧操作数连接在一起。它使对象(左侧操作数)发生突变,而不是将结果传递回去。

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

10-15 10:25