kotlin关键字infix
2023-04-06 本文已影响0人
KevinGarnett21
一. 概念
Kotlin中缀函数(Infix Functions)是一种特殊类型的函数,可以使用中缀符号(如+
、-
、*
、/
等)来调用。这种语法使得代码更加简洁易读。中缀函数通常用于描述两个对象之间的关系,例如数学中的加法、减法等运算。
要定义一个中缀函数,需要将infix
关键字放在函数声明前面,而且必须满足以下条件:
必须是成员函数或者扩展函数
只有1个参数
参数必须是无默认值的
错误示例
// 编译器提示:'infix' modifier is inapplicable on this function: should not have varargs or parameters with default values
// 翻译:“infix”修饰符不适用于此函数:不应具有可变参数或具有默认值的参数
infix fun String.plus(x: String = "123"): String {
return this + x
}
// 'infix' modifier is inapplicable on this function: must have a single value parameter
// 翻译: “infix”修饰符不适用于此函数:必须有一个单值参数
infix fun String.plus(x: String,y: String): String {
return this + x
}
正确示例:
infix fun Int.plus(x: Int): Int {
return this + x
}
fun main() {
val a = 10
val b = 5
val result = a plus b // 等价于 a.plus(b)
println(result) // 输出 15
}
在上面的示例中,我们定义了一个中缀函数 plus
,该函数接受一个整数参数 x
,并将其与调用该函数的整数对象相加。在 main
函数中,我们可以使用中缀符号 plus
调用该函数,并将结果存储在 result
变量中。
源码示例
infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that)
fun main() {
// 调用
val pair = "key" to "value"
}
上面的代码将创建一个 Pair
对象,其中第一个元素是字符串 "key"
,第二个元素是字符串 "value"
。
二. 注意
1. 中缀函数的优先级低于算术运算符和比较运算符,但高于逻辑运算符。因此,如果需要在表达式中混合使用中缀函数和运算符,应该使用括号来明确优先级。
例如:
infix fun String.plus(x: String): String {
return this + x
}
fun main() {
val a = "Hello"
val b = "World"
val result = (a plus b).length // 加括号强制优先级
println(result) // 输出 10
}
在上面的示例中,我们定义了一个中缀函数 append
,该函数将两个字符串连接起来。在 main
函数中,我们使用括号将中缀函数的调用和后续操作组合在一起,以明确优先级。
2.如果你非常需要使用保留字作为中缀函数的名称,可以使用反引号将保留字括起来
部分保留字如下:
as, as?, break, class, continue, do, else, false, for, fun, if, in, !in, interface, is, !is, null, object, package, return, super, this, throw, true, try, typealias, val, var, when, while
例如:
// is作为保留字需要使用``括起来,建议尽可能避免在中缀函数的名称中使用保留字
infix fun String.`is`(other: String): Boolean {
return this == other
}