学习
实践
活动
工具
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参数上下文一致

64270

oModel.create will also send to backend directly

Created by Wang, Jerry, last modified on Jun 02, 2016

25500
  • 广告
    关闭

    热门业务场景教学

    个人网站、项目部署、开发环境、游戏服务器、图床、渲染训练等免费搭建教程,多款云服务器20元起。

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

    TIMEOUT will also publish one order event

    11630

    BOL set property will also trigger REREAD

    # how is is_propert_readonly of CL_CRM_BOL_ENTITY implemented

    13220

    interaction objects are also considered in one order search

    读取相关interaction object: ? 检查是否应该搜索interaction object: ? ? ? table: crmc_io_appl ? 最后和appointment不相关interaction object从结果集中移除: ?

    13510

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

    23210

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

    我了方便大家阅读很不至于疲劳我们把整个拆分为两步分,接着下部分我们将with with with同样也是标准库一个扩展,不同是它不是功能性扩展,他只是起一个承接作用方便大家标识和转呈 fun ,然后使用apply进行其余属性初始化赋值 also 与apply类似also也是对实例扩展,它同样执行是block和进行返回。 val age: Int, val about: String) val jacke = Person("Jack", 30, "Amdroid developer") .also , "Amdroid developer") .also { print("$it") } with(Person()) { = 30 about = "iOS/Android developer" }.run { hell() } }.also

    40520

    Change code to ensure that OPA5 work also in WebIDE

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    16320

    Kotlin中apply,run,let,also,with函数总结

    also 从1.1新增方法 public inline fun <T> T.also(block: (T) -> Unit): T { block(this); return this } 感觉是 apply 之于run also至于let存在。 doChangeMp(it) println(it.getMpValue()) //3.最后一行返回值返回自己 it } m.also 官网上例子: fun Block.copy() = Block().also { it.content = this.content } 其他 T.apply{}和T.run{}其实是一样。 apply`只是将本身做了强制返回。 T.also{}和T.let{}其实是一样also只是将本身做了强制返回。 with(T){}和T.run{}其实是一致

    1.2K20

    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

    48220

    Kotlin中run, with, let, also and apply使用方法

    1、普通写法和扩展函数 with和T.run 看起来很相似,并且它们功能也类似。 run { javaScriptEnabled = true databaseEnabled = true } 这时候,使用T.run扩展功能是比较好,因为我们可以在使用前检查可空性。 let { println("The length of this String is ${it.length}") } 如果你查看T.run函数签名,你会发现T.run只是作为扩展函数调用 而对于T.let函数签名,你会发现T.let正在传递它自己,即block:(T)。因此,这就像一个lambda参数传递。在它作用域范围内被称为it。 intent=Intent() intent.action=actionData intent.data=Uri.parse(datas) return intent } //改进后写法

    34920

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

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

    35020

    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添加进去而已

    26710

    let,run,with,apply及also差异化分析

    以及 also,这五个函数工作方式可以说非常相似,但是我们需要了解是这5种函数差异,以便在不同场景更好利用它。 但是,apply 和下面查看 also 返回 T。 also inline fun <T> T.also(block: (T) -> Unit): T also是 T 扩展函数,返回值与apply一致,直接返回T。 also函数用法类似于let函数,将对象上下文引用为“it”而不是“this”以及提供空安全检查方面。 因为T作为block函数输入,可以使用also来访问属性。 所以,在不使用或不改变对象属性情况下也使用also

    23450

    Kotlin中标准函数run、with、let、also与apply使用和区别详解

    但是对于run,with,let,also和apply这五个函数他们用法及其相似,以至于我们无法确定去选择使用哪一个。 with和其它通用标准函数 在这里之所以将with函数单独拿出来进行说明,是因为with得用法和其它通用标准函数用法比较独特。在这里我们依然使用run函数来进行对比。 T.let和T.also返回值使不同。 对于T.let和T.also都能够进行链式操作,那么我们现在结合一下T.let和T.also链式调用来看一下在实际场景中应用。 没有使用到以外,根据上面的用法我们可以总结出来这些标准函数三大特性。

    47310

    amazement用法_release用法

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

    10230

    patch用法_以用法

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

    7510

    fstream用法_fun 用法

    作为派生类,它们继承了插入和提取运算符(以及其他成员函数),还有与文件一起使用成员和构造函数。可将文件<fstream> 包括进来以使用任何fstream。 对这些类一个对象所做第一个操作通常就是将它和一个真正文件联系起来,也就是说打开一个文件。 被打开文件在程序中由一个流对象(stream object)来表示 (这些类一个实例) ,而对这个流对象所做任何输入输出操作实际就是对该文件所做操作。 使用函数成员 get、put、read、write等 经常和read配合使用函数是 gcount(),用来获得实际读取字节数。 ,对没有关闭文件进行关闭操作。

    8020

    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权限。 如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    7040

    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> T.also(block: (T) -> Unit): T { block(this) return this } also 调用示例: var result = "a".also { it.plus("b") } takeIf 语法糖 public 最后,光是了解他们原理和调用情况还是不够,再不影响代码阅读情况下要把它们引入到我们代码中去,灵活地使用它们。

    88410

    扫码关注腾讯云开发者

    领取腾讯云代金券