首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

聊聊kotlin中run, let, with, apply, also ...

, 觉得用法这么像, 为什么弄出多个名字, 不过仔细看看嘛, 还是略有不同, 待我慢慢道来....kotlin中, run, let, with, apply, also, 都是标准库函数, 它实现可以直接在IDE上跳转看到, 也可以在这里看: Standard.kt 看这些函数实现, 会发现它们非常短...., 它是kotlinextension一个用法: 确切说, 这个run是一个generic extension函数, 对于任何类型T, 扩展了run这个方法, 参数类型是签名”T.() -> R”...关于kotlin extension更详细介绍, 可以查看官网文档 this上下文差异是这两个run用法最大不同 let函数 - public inline fun T.let(block: (T...return this } 剩下apply和also两个函数, 他们和run, let实现又非常相似 apply和T.runblock参数上下文一致 also和T.letblock参数上下文一致

1.2K70
您找到你想要的搜索结果了吗?
是的
没有找到

Kotlin中let、with、run、apply、also常用场景

常见场景使用 let 处理需要针对一个可null对象统一做判空处理 private var textView: TextView?...,可以省去类名重复,直接调用类方法即可 var bean=Bean("小米",12) //没使用 with前 var s1=bean.name+bean.age...with函数传入对象判空问题,在run函数中可以像let函数一样做判空处理 apply 整体作用功能和run函数很像,唯一不同点就是它返回值是对象本身,而run函数是一个闭包形式返回,返回是最后一行值...正是基于这一点差异它适用场景稍微与run函数有点不一样。apply一般用于一个对象实例初始化时候,需要对对象中属性进行赋值。...also 适用于let函数任何场景,also函数和let很像,只是唯一不同点就是let函数最后返回值是最后一行返回值而also函数返回值是返回当前这个对象。一般可用于多个扩展函数链式调用

95310

kotlin标准库扩展之 let run apply also(一)

kotlin十分简便系统为我们提供了一些十分简便标准库扩展,今天我们就看看这些常规使用频率比较高能帮助我们加速开发标准库吧 let 对于学习Kotlin这门语言的人来说肯定都知道其一个特点--...不停使用if判断显然是不合乎设计,于是我么let应运而生 The Kotlin standard library function let can be used for scoping and...对于基本用法和let一样都是内部执行一个闭包并返回自身数据。...不同是run内部走是一个this引用,这要说明了内部你可以直接调用对已实例自身方法 fun runFun() { fun getNullableLengt(ns: String) {...this是完全可以省略,我们只是为了让大家看明显才吧对应this添加进去而已

45210

Kotlin中let()with()run()apply()also()函数使用方法与区别

apply{ //sectionArticle不为空时候操作sectionArticle } 六、内联扩展函数之also 1、also函数使用一般结构 object.also{ //todo...(block: (T) - Unit): T { block(this); return this } 3、also函数inline结构分析 also函数结构实际上和let很像唯一区别就是返回值不一样...而also函数返回则是传入对象本身 4、also函数编译后class文件 //kotlin fun main(args: Array<String ) { val result = "testLet...函数<em>的</em>适用场景 适用于let函数<em>的</em>任何场景,<em>also</em>函数和let很像,只是唯一<em>的</em>不同点就是let函数最后<em>的</em>返回值是最后一行<em>的</em>返回值而<em>also</em>函数<em>的</em>返回值是返回当前<em>的</em>这个对象。...2、动态inflate出一个XML<em>的</em>View<em>的</em>时候需要给View绑定数据也会用到. 3、一般可用于多个扩展函数链式调用 4、数据model多层级包裹判空处理<em>的</em>问题 <em>also</em> fun T.<em>also</em>(block

1.5K20

【Kotlin】标准库函数 ③ ( with 标准库函数 | also 标准库函数 )

函数 参数 ; with 函数原型 : /** * 以给定[receiver]作为接收者调用指定函数[block]并返回其结果。...(str) } 执行结果 : Hello 二、also 标准库函数 ---- also 函数 功能与 let 函数 功能 类似 ; also 函数 将 接收者 ( 函数调用者 ) 作为参数传递给 Lambda...表达式参数 , 并返回 接收者实例对象本身 ; also 函数 与 let 函数 返回值不同 , also 函数 返回 接收者对象本身 , let 函数 返回 Lambda 表达式最后一行 ; also...函数 返回 接收者对象本身 , 那么就可以使用该特性 , 对 接收者 执行 函数式编程 链式调用 ; 代码示例 : fun main() { val str = "hello".also {...println(it) }.also { // 该对象生命周期仅限于该闭包 println(it.capitalize()) }

79510

链式操作用法reject用法catch用法all用法race用法

链式操作用法 所以,从表面上看,Promise只是能够简化层层回调写法,而实质上,Promise精髓是“状态”,用维护状态、传递状态方式来使得回调函数能够及时调用,它比传递callback函数要简单...reject用法 到这里,你应该对“Promise是什么玩意”有了最基本了解。那么我们接着来看看ES6Promise还有哪些功能。我们光用了resolve,还没用reject呢,它是做什么呢?...catch用法 我们知道Promise对象除了then方法,还有一个catch方法,它是做什么用呢?...all用法 Promiseall方法提供了并行执行异步操作能力,并且在所有异步操作执行完后才执行回调。...race用法 all方法效果实际上是「谁跑慢,以谁为准执行回调」,那么相对就有另一个方法「谁跑的快,以谁为准执行回调」,这就是race方法,这个词本来就是赛跑意思。

4.3K20

amazement用法_release用法

大家好,又见面了,我是你们朋友全栈君。...Mutex中提供了WiteOne,ReleaseMutex 两个实例方法~ WiteOne作用是”阻塞当前线程,提供对该线程原子操作” 也就是说当一个线程遇到WiteOne时候,如果在WiteOne...里面没有线程在操作,则此线程进去操作 而里面有线程时候,所有到此线程均需要排队等候里面的线程执行完毕~ 而控制这样操作结束标记就是使用ReleaseMutex 方法!...,此变量就会加锁,而其他线程是无法访问,只能挂起等候此变量解锁 我感觉实际上使用也就是Mutex来实现 好了开始说说具体实现吧 public class MutexTest { private...//等待获得对a权利 a++ //保护部分 ReleaseMutex......

3.3K30

patch用法_以用法

,diff功能就是用来比较两个文件不同,然后记录下来,也就是所谓diff补丁。...,patch就是利用diff制作补丁来实现源文件(夹)和目的文件(夹)转换。...补丁头 补丁头是分别由—/+++开头两行,用来表示要打补丁文件。...它通常由一部分不用修改东西开始和结束。他们只是用来表示要修改位置。他们通常以@@开始,结束于另一个块开始或者一个新补丁头。...块缩进 块会缩进一列,而这一列是用来表示这一行是要增加还是要删除。 块第一列 +号表示这一行是要加上。 -号表示这一行是要删除。 没有加号也没有减号表示这里只是引用而不需要修改。

5K10

chmod用法_crontab用法

整理一下chmod用法,给自己看~~~~ 语法 chmod [-cfvR] [--help] [--version] mode file......参数说明: -c : 若该文件权限确实已经更改,才显示其更改动作 -f : 若该文件权限无法被更改也不要显示错误讯息 -v : 显示权限变更详细资料 -R : 对目前目录下所有文件与子目录进行相同权限变更...u 表示该文件拥有者,g 表示与该文件拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。 ‘+’ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。...另外,可用数字代替,语法为: chmod abc file 其中a,b,c各为一个数字,分别表示User、Group、及Other权限。...如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

6.9K40

ringbuffer常规用法_likewise用法

大家好,又见面了,我是你们朋友全栈君。...读指针指向环形缓冲区中可读数据,写指针指向环形缓冲区中可写缓冲区。通过移动读指针和写指针就可以实现缓冲区数据读取和写入。...在通常情况下,环形缓冲区读用户仅仅会影响读指针,而写用户仅仅会影响写指针。如果仅仅有一个读用户和一个写用户,那么不需要添加互斥保护机制就可以保证数据正确性。...Buffer)初始态 2、向环形缓冲区(Ring Buffer)中添加一个数据 3、向环形缓冲区(Ring Buffer)中添加一个数据,并读取一个数据 注意:环形缓冲区是使用线性存储区实现...,实际物理存储是线性 类似于二维或多维数组,其实际存储也是由线下存储实现 RING BUFFER用法(C语言) 话不多说直接上代码,边分析代码、边理解原理 RING BUFFER常规用法 Ring

3.8K20

viewstub 详细用法_pageinfo用法

大家好,又见面了,我是你们朋友全栈君。 在开发应用程序时候,经常会遇到这样情况,会在运行时动态根据条件来决定显示哪个View或某个布局。...那么最通常想法就是把可能用到View都写在上面,先把它们可见性都设为View.GONE,然后在代码中动态更改它可见性。这样做法优点是逻辑简单而且控制起来比较灵活。...推荐做法是使用android.view.ViewStub,ViewStub 是一个轻量级View,它一个看不见,不占布局位置,占用资源非常小控件。...所向 布局就会被Inflate和实例化,然后ViewStub布局属性都会传给它所指向布局。...但ViewStub也不是万能,下面总结下ViewStub能做事儿和什么时候该用ViewStub,什么时候该用可见性控制。

3.5K40

Kotlin 中 run、let、with、apply、also、takeIf、takeUnless 语法糖使用和原理分析

在 Kotlin 有一些可以简化代码语法糖,比如 run、let、with、apply、also、takeIf、takeUnless 等。...而带接收者函数字面值,就是在作为传入参数函数变量具体函数形式参数前面多了接收者对象,简单说就是在 ()前面多了一个点和一个对象,成了如下形式: fun exec(invoke: ReceiveObject...also 语法糖 public inline fun T.also(block: (T) -> Unit): T { block(this) return this } also...调用示例: var result = "a".also { it.plus("b") } takeIf 语法糖 public...最后,光是了解他们原理和调用情况还是不够,再不影响代码阅读情况下要把它们引入到我们代码中去,灵活地使用它们。

1.6K11
领券