从结构上来看apply函数和run函数很像,唯一不同点就是它们各自返回的值不一样,run函数是以闭包形式返回最后一行代码的值,而apply函数的返回的是传入对象的本身。 五、内联扩展函数 also 5.1 also 函数使用的一般结构 object.also {// todo} 5.2 also 函数的inline+lambda结构 publicinlinefun<T>T.also(block: (...
run 适用于let,with函数任何场景。因为run函数是let,with两个函数结合体,准确来说它弥补了let函数在函数体内必须使用it参数替代对象,在run函数中可以像with函数一样可以省略,直接访问实例的公有属性和方法,另一方面它弥补了with函数传入对象判空问题,在run函数中可以像let函数一样做判空处理 apply 整体作用功能和run...
funmain(){valresult=findPerson()?.also{println(it.name)// 输出 JamFFprintln(it.age)// 输出 18it.work()// 输出 JamFF正在工作...}println(result)// 输出 Person1(name=JamFF, age=18)} 类似let,区别是,返回值是调用者自己。 在作用域中使用 it 代替调用者,调用者为返回值。 六、 总结 上面...
apply更适合改变对象自身,用于一些初始化的操作;also则更加偏向于在处理完对象后还需要做其他相关的操作。 //创建foo之后,对成员函数进行初始化val foo =Foo().apply { bar= 1baz= 2}//创建list之后,进行后续的相关的操作val list = mutableListOf("item").also { println("$it has been created") } 3...
将表达式作为变量引入为局部作用域中:let 对象配置:apply 对象配置并且计算结果:run 在需要表达式的地方运行语句:非扩展的 run 附加效果:also 一个对象的一组函数调用:with 不同作用域函数的使用场景存在重叠,可以根据项目或团队中使用的特定约定来选择使用哪些函数。
应用场景: let应用场景+with应用场景+run应用场景 初始化一个对象时,操作对象属性,并最终返回这个对象。 动态inflate出一个XML的View的时候需要给View绑定数据也会用到. 可用于多个扩展函数链式调用 数据model多层级包裹判空处理的问题 also 结构:fun T.also(block: (T) -> Unit): T { block(this); return ...
2.1 作用 & 应用场景 类似let函数,但区别在于返回值: let函数:返回值 = 最后一行 / return的表达式 also函数:返回值 = 传入的对象的本身 2.2 使用示例 代码语言:javascript 复制 // let函数varresult=mVar.let{it.function1()it.function2()it.function3()999}// 最终结果 = 返回999给变量result// also函...
前面看到的 let、with 和run 函数返回的值都是 R。但是,apply 和下面查看的 also 返回T。例如,在 let 中,没有在函数块中返回的值,最终会成为 Unit 类型,但在 apply 中,最后返回对象本身 (T) 时,它成为 Book 类型。 apply函数主要用于初始化或更改对象,因为它用于在不使用对象的函数的情况下返回自身。 2.5...
关于Kotlin的作用域函数:let、run、with、apply和also。它们有一个共同点:它们都在对象上调用,在这些函数的作用域内,可以访问对象本身,而无需其名称。 使用let作用域函数转换对象并返回结果 首个提示关于let作用域函数,当你想对一个对象执行转换并分配结果时,它特别有用: ...