Z
ZHANK
函数

中缀与运算符

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