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)
}