public inline fun <T, R> T.run(block: T.() -> R): R { return block() } 1. 2. 3. 从源码上看,跟直接的run只有在函数的头做了扩展函数的声明,那么我们看下是如何使用和需要注意哪里的 fun testRun1() { val b = BaseInner() val result = b.run { // 这里的run是BaseInner的扩展函...
run是一个扩展函数,它结合了apply和let的特点。run函数在 Lambda 表达式中直接访问接收者对象的属性和方法,同时返回 Lambda 表达式的结果。 这个函数的语法为: fun<T,R>T.run(block:T.()->R):R 其中,T 是对象的类型,R 是返回值的类型,block 是一个 lambda 表达式,它对该对象进行一些操作并返回一个结果。
funmain(){valresult=listOf(3,2,1).first().let{it*it}println(result)}funformatName(name:String?):String{returnname?.let{"Whelcome,$it"}?:"name?"} run 和apply差不多,但返回的是lambda的执行结果,而apply返回的是接收者 可以执行函数引用 ...
T.let();调用let函数,同时将自身传进去,用it来标示,返回为lamdba的执行结果,let和run极其相似,一个的别名是it,一个是this,run中的T更像是在T对象的上下文里面,所以有些方法可以省略,let中的T更倾向于对象的外部处理,比如arraylist的add操作,同时let还能更改别名,而run只能用this。 fun main(args: Array<String...
一手遮天 Android - kotlin: let, also, with, run, runCatching, apply 示例如下: /kotlin/Demo12.kt /** * 本例用于演示 let, also, with, run, runCatching, apply 的用法 */packagecom.webabcd.androiddemo.kotlinimportandroidx.appcompat.app.AppCompatActivityimportandroid.os.Bundleimportcom.webabcd....
first().let { it*it } println(result) } fun formatName(name:String?): String { return name?.let { "Whelcome, $it" } ?: "name?" } run 和apply差不多,但返回的是lambda的执行结果,而apply返回的是接收者 可以执行函数引用 多个函数引用可以链式调用 代码语言:javascript 复制 fun main() {...
apply函数可以看作是一个配置函数,可以传入一个接收者,然后调用一系列函数来配置以便使用,如果提供lambda给apply函数执行,将返回配置好的接收者
let的源码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 @kotlin.internal.InlineOnly publicinline fun <T, R> T.lets(block: (T) -> R): R { contract {//它将表明 block 这个扩展方法一定会在这里被执行一次 //callsInPlace(lambda: Function<R>, kind: InvocationKind = InvocationKind...
函数式数据处理:利用Kotlin的函数式特性进行无副作用的数据处理,如使用let、run、with、apply等作用域函数,以及使用Sequence进行惰性求值。 协程:理解和掌握Kotlin协程的概念,能够编写异步非阻塞代码,管理并发任务,避免回调地狱,使用挂起函数、launch、async/await、Channel等构建复杂的异步逻辑。
首先委托的概念就是把一个对象的职责委托给另外一个对象,在kotlin中有属性的委托和类的委托。属性的委托比如by lazy,他的作用是使用到的时候才加载简化了判空代码也节省了性能。类的委托通常是一个接口委托一个对象interface by Class。目的是对一个类的解耦方便以后相同功能的代码复用。例子就不举例了,就是但凡开...