我正在关注kotlin重载教程here,但无法理解此示例:
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
-这些值从何而来?
答案 0 :(得分:1)
您有一个类class Point(val x: Int = 0, val y: Int = 10)
,该类具有x
和y
属性。考虑将operator fun plus(p: Point) : Point
作为类Point
的简单函数,该类接收另一个Point
作为参数,创建另一个Point
实例,并添加x
和y
当前点和另一点p
的坐标并将其返回。因此,在该函数中,您可以访问Point
当前实例和另一个Point
实例:x
和y
的属性。
我们可以如下读取表达式var sum: Point = p1 + p2
:
将p1
作为Point
的当前实例,将p2
添加为Point
的另一个实例。在这种情况下,在plus
实例上调用p1
函数,并传递p2
作为该函数的参数。当函数返回变量sum
时,它将引用新创建的Point
的实例。