run函数用法,run指令代码大全可复制

首页 > 机动车 > 作者:YD1662024-01-26 14:55:45

在Standart.kt中定义

@kotlin.internal.InlineOnly public inline fun <T, R> T.run(block: T.() -> R): R { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } return block() }

调用run函数的对象类型是泛型,说明任何对象都可以调用该方法。

run 函数是将一个对象作为 lambda 表达式的接收者,在 lambda 表达式内部可以通过 this 或省略掉 this 直接访问对象的方法和属性。与let函数一样,它的返回值是 lambda 表达式的执行结果。

使用场景:

package str fun main(){ var name = "Stephen" println(name) // 匿名函数 var r1 = name.run { if(this == "hello") false else true } println("r1--$r1") val f1 : (e:String)->String = { e->e ":success" } var r2 = name.run(f1) println("r2--$r2") // 具名函数 var r3 = name.run(::isEqual) println("r3--$r3") } fun isEqual(src:String):Boolean{ println("in method equal:$src") return false; } //输出 Stephen r1--true r2--Stephen:success in method equal:Stephen r3--false

令我不理解的是,具名函数isEqual作为run的参数传递后,isEqual函数的参数src值为什么会是run函数的调用者name。

并且这种用法只适用于isEqual函数只有1个参数,如果有2个参数就报错。这是有什么特殊的约定吗?

有没有大神指点一下?

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.