0

我在这里关注 kotlin 重载教程,但无法理解此示例:

fun main(args: Array<String>) { 
    val p1 = Point(3, -8) 
    val p2 = Point(2, 9) 
    var sum = Point() 
    sum = p1 + p2 
    println("sum = (${sum.x}, ${sum.y})") 
} 

class Point(val x: Int = 0, val y: Int = 10) { 

    // overloading plus function 
    operator fun plus(p: Point) : Point { 
        return Point(x + p.x, y + p.y) 
    } 
}

运行程序时,输出将是:

sum = (5, 1)

具体来说,返回线: return Point(x + p.x, y + p.y)

这条线是如何工作的?为什么会这样x + p.x——这些价值观从何而来?

4

1 回答 1

1

您有一个class Point(val x: Int = 0, val y: Int = 10)具有xy属性的类。考虑operator fun plus(p: Point) : Point作为一个简单的类函数,Point它接收另一个Point作为参数,创建另一个Point添加实例x以及y当前和另一个点的坐标p并返回它。因此,在该函数中,您可以访问当前实例Point和另一个Point实例的属性:xy

我们可以将表达式解读var sum: Point = p1 + p2为:取p1为 的当前实例Point,添加p2为 的另一个实例Point。在这种情况下,plus函数在实例上调用,并作为该函数的参数p1传递。p2当函数返回变量sum时,将引用新创建的实例Point

于 2019-01-06T09:06:19.140 回答