Kotlin笔记21-infix,高级语法糖


13.1 infix,高级语法糖

  • infix函数

infix

​举个栗子:​

"Hello Kotlin".startsWith("Hello")

​采用infix:​

infix fun String.beginsWith(prefix: String) = startsWith(prefix)

​调用:​

"Hello Kotlin" beginsWith "Hello"

序号

Tips

infix的优点

它的可读性高,更接近于使用英语的语法来编写

序号

infix使用的局限性

1

infix函数不能定义为顶层

它必须是某个类的成员函数, 可以用扩展函数的方式将它定义到某个类当中

2

infix函数只接收一个参数, 对参数类型没有限制.

小试牛刀

fun example2() {
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
if (list.contains("Banana")) {
//处理具体的逻辑
}
}

infix fun <T> Collection<T>.has(element: T) = contains(element)

fun example3() {
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
if(list has "Apple"){
//处理具体的逻辑
}
}

揭秘A to B型语法

​to()源码:​

public infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that)

​尝试手写:​

infix fun <A, B> A.with(that: B): Pair<A, B> = Pair(this, that)

​调用:大功告成​

fun example4() {
val map = mapOf("Apple" with 1, "Banana" with 2)
}