中缀与运算符
infix 中缀函数、operator 运算符重载、解构声明
中缀与运算符
infix 让函数调用更自然,operator 重载运算符——代码更优雅。
学完本章你将: 掌握 infix 中缀、operator 运算符重载。
infix 中缀函数
kotlin
// 单参数扩展函数可声明为 infix
infix fun Int.times(str: String) = str.repeat(this)
println(3 times "Hi") // HiHiHi
println(2 times "Bye ") // Bye Bye
// 标准库示例
val pair = "key" to "value" // to 是 infix 函数
val map = mapOf(1 to "A", 2 to "B")
operator 运算符重载
kotlin
data class Vector(val x: Int, val y: Int) {
operator fun plus(other: Vector) = Vector(x + other.x, y + other.y)
operator fun times(scalar: Int) = Vector(x * scalar, y * scalar)
operator fun unaryMinus() = Vector(-x, -y)
}
val v1 = Vector(1, 2)
val v2 = Vector(3, 4)
println(v1 + v2) // Vector(4, 6)
println(v1 * 3) // Vector(3, 6)
println(-v1) // Vector(-1, -2)
可重载的运算符
kotlin
a + b → plus
a - b → minus
a * b → times
a / b → div
a % b → rem
a++ → inc
a-- → dec
a == b → equals
a > b → compareTo
a[b] → get
a[b]=c → set
a in b → contains