nonLocalReturn返回调用的方法,下面直接返回main方法
inline fun nonLocalReturn(block:() -> Unit) {
block()
}
fun main() {
}
}
禁止non–local–return,使用crossinline关键字
public inline fun IntArray.forEach(crossinline action: (Int) -> Unit): Unit {
for(element in this) action(element)
}
inline set(value) {
pocket = value
}
内联函数限制:
标准库中常用的扩展函数:let、run、also、alppy、use
从各自的函数上看
@kotlin.internal.InlineOnly public inline fun <T, R> T.let(block: (T) -> R): R { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } return block(this) }
let将T对象(即引用let的对象)作为函数的参数,那么在扩展函数内部,就可以用it替代T对象进行方法调用,而且let函数本身会对对象进行非空判断,返回值是函数返回值
@kotlin.internal.InlineOnly @SinceKotlin("1.1") public inline fun <T> T.also(block: (T) -> Unit): T { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } block(this) return this }
also将T对象(即引用also的对象)作为函数的参数,那么在扩展函数内部,就可以用it替代T对象进行方法调用,而且let函数本身会对对象进行非空判断,返回值是对象本身
@kotlin.internal.InlineOnly public inline fun <T, R> T.run(block: T.() -> R): R { contract {` callsInPlace(block, InvocationKind.EXACTLY_ONCE) } return block() }
将函数作为T对象(即引用run的对象)的扩展函数,则在函数内部可用this引用T对象,并使用T对象的方法,返回值是函数本身
@kotlin.internal.InlineOnly public inline fun <T> T.apply(block: T.() -> Unit): T { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } block() return this }
将函数作为T对象(即引用apply的对象)的扩展函数,则在函数内部可用this引用T对象,并使用T对象的方法,返回值是对象本身
public inline fun <T, R> with(receiver: T, block: T.() -> R): R { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } return receiver.block() }
将函数作为对象的扩展函数,返回函数本身
takeIf
public inline fun <T> T.takeIf(predicate: (T) -> Boolean): T? { contract { callsInPlace(predicate, InvocationKind.EXACTLY_ONCE) } return if (predicate(this)) this else null }
takeUnless
public inline fun <T> T.takeUnless(predicate: (T) -> Boolean): T? { contract { callsInPlace(predicate, InvocationKind.EXACTLY_ONCE) } return if (!predicate(this)) this else null }
public inline fun repeat(times: Int, action: (Int) -> Unit) { contract { callsInPlace(action) } for (index in 0 until times) { action(index) } }
原文地址:https://blog.csdn.net/Dragonlongbo/article/details/134388124
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_31546.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!