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

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

导语: kotlin 标准库中, run, let, with, apply, also 实现解读 在看kotlin代码时, 可能会看到let, run这样函数调用, 最早接触时候, 我也弄不清楚其中差异...kotlin中, run, let, with, apply, also, 都是标准库函数, 它实现可以直接在IDE上跳转看到, 也可以在这里看: Standard.kt 看这些函数实现, 会发现它们非常短...这个BLOCK和run函数extension函数版本block参数, 是等价. apply函数, also函数 - public inline fun T.apply(block: T.() -...return this } 剩下apply和also两个函数, 他们和run, let实现又非常相似 apply和T.runblock参数上下文一致 also和T.letblock参数上下文一致..., 应该就对run, let, with, apply, also差异完全明了 思考 在上边实例代码中, T.run, T.apply, with(T)对应block中, 怎么拿到TestDemo

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函数返回值是返回当前这个对象。一般可用于多个扩展函数链式调用

90810

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

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

44910

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()) }

79210

文件指针位置

(f.tell()) # 更改文件指针位置 seek(偏移量,whence) # 偏移量是数字,距离whence字符数 # whence:0:文件开头 1:当前位置 2:文件结尾 seek(10,0...nccccc\nddddd\n') # f.seek(4,0) f.seek(0, 0) print(f.read()) print('='*10) # aaaaa\r\nbbbbb,这串数字从第五,第六个位置打印后两位是一样...f.seek(6, 0) # seek 移动鼠标位置(位数)包含\r\n,读取时(位数)不包含\r print(f.read(2))...# 本来是光标移动到开始0,打印光标后七个最后一个,和光标移动到第六个,打印后一个是一样 print('-'*10) # 第六个位置是\r,第七个位置是\n,所以读七个不包括\r,会打出来...# windows \r\n \r表示回行首 \n换行 # unix/linux \n # mac \r # 这里‘指针测试.txt’文件里内容如下: # aaaaa # bbbbb #

1.3K40

聚焦位置-选择您喜欢位置放置虚拟物体

我们现在能够看到它,但它位置并不理想,就好像它是在相机起始位置,这是世界起源。最重要是,它是空闲。我们希望它在场景中移动,以便我们可以选择一个位置来添加模型。...let hitTestResult = hitTest.first 世界变换 命中测试目的是检索表面的位置。并且该位置存储在世界变换中。世界变换是命中测试结果相对于世界坐标的节点变换属性。...简而言之,这些结果包含有关变换信息,如方向,位置和比例。 guard let worldTransform = hitTestResult?....worldTransform else {return} 世界变换是一个4x4矩阵,位置保留在第四列。因为矩阵是多维数组并且数组值从0开始,所以第四列数量是3。...let worldTransformColumn3 = worldTransform.columns.3 最后,将该位置指定给焦点方块。同时,它会随着相机移动而更新。

2.4K30

基于位置点击模型

主流点击模型大都基于点击模型方面最基础研究,认为用户在浏览搜索引擎时采用是沿着搜索结果列表从上到下依次浏览方式,根据这个假设,用户浏览顺序与搜索结果位置顺序是一致。...因此大多数点击模型都是基于位置构建方式(我们称作基于位置点击模型)。...,即检验度(直观来说,就是这个搜索结果能否被用户观测到,更进一步说,文档是否处于显眼位置,更往前搜索结果被检验到概率更大),在 PBM 假设中检验度仅仅和搜索结果位置有关,是独立概率; 文档是否能吸引用户...PBM 概率图模型下图所示: PBM 概率公式如下: 其中 P(Au​=1)=αuq​,α表示吸引度,仅与搜索词q与文档u有关;P(Eu​=1)=γur​​,γ表示检验度,仅与文档所处位置...但与 PBM 不同点在于,是否被检验由排序在此文档前所有文档是否被点击共同决定,我们假设检验概率不仅依赖于文档位置 r也依赖于上一个点击文档位置 r′。

1.1K20
领券