当前位置: 首页 > news >正文

新手学做网站 cs5 pdf/互联网培训

新手学做网站 cs5 pdf,互联网培训,城乡企业建设部网站,黄村网站建设价格Kotlin之let,apply,with,run函数区别 重新整理 重新整理了各种函数的区别,请移步到这里。 以下作废 很长一段时间内都一直使用Kotlin这门语言,也只是纯粹使用简单语法,最近有时候写的代码,编辑器自动提示使用let等函数&#xff0…

Kotlin之let,apply,with,run函数区别


重新整理

重新整理了各种函数的区别,请移步到这里。


以下作废


很长一段时间内都一直使用Kotlin这门语言,也只是纯粹使用简单语法,最近有时候写的代码,编辑器自动提示使用let等函数,然后就专门花点时间研究了下。

let

首先let()的定义是这样的,默认当前这个对象作为闭包的it参数,返回值是函数里面最后一行,或者指定return

fun <T, R> T.let(f: (T) -> R): R = f(this)

简单示例:

fun testLet(): Int {// fun <T, R> T.let(f: (T) -> R): R { f(this)}"testLet".let {println(it)println(it)println(it)return 1}
}
//运行结果
//testLet
//testLet
//testLet

可以看看最后生成的class文件,代码已经经过格式化了,编译器只是在我们原先的变量后面添加了let里面的内容。

public static final int testLet() {String str1 = "testLet";String it = (String)str1;int $i$a$1$let;System.out.println(it);System.out.println(it);System.out.println(it);return 1;
}

来个复杂一定的例子

fun testLet(): Int {// fun <T, R> T.let(f: (T) -> R): R { f(this)}"testLet".let {if (Random().nextBoolean()) {println(it)return 1} else {println(it)return 2}}
}

编译过后的class文件

public static final int testLet() {String str1 = "testLet";String it = (String)str1;int $i$a$1$let;if (new Random().nextBoolean()){System.out.println(it);return 1;}System.out.println(it);return 2;
}

apply

apply函数是这样的,调用某对象的apply函数,在函数范围内,可以任意调用该对象的任意方法,并返回该对象

fun <T> T.apply(f: T.() -> Unit): T { f(); return this }

代码示例

fun testApply() {// fun <T> T.apply(f: T.() -> Unit): T { f(); return this }ArrayList<String>().apply {add("testApply")add("testApply")add("testApply")println("this = " + this)}.let { println(it) }
}// 运行结果
// this = [testApply, testApply, testApply]
// [testApply, testApply, testApply]

编译过后的class文件

  public static final void testApply(){ArrayList localArrayList1 = new ArrayList();ArrayList localArrayList2 = (ArrayList)localArrayList1;int $i$a$1$apply;ArrayList $receiver;$receiver.add("testApply");$receiver.add("testApply");$receiver.add("testApply");String str = "this = " + $receiver;System.out.println(str);localArrayList1 = localArrayList1;ArrayList it = (ArrayList)localArrayList1;int $i$a$2$let;System.out.println(it);}

with

with函数是一个单独的函数,并不是Kotlin中的extension,所以调用方式有点不一样,返回是最后一行,然后可以直接调用对象的方法,感觉像是let和apply的结合。

fun <T, R> with(receiver: T, f: T.() -> R): R = receiver.f()

代码示例:

fun testWith() {// fun <T, R> with(receiver: T, f: T.() -> R): R = receiver.f()with(ArrayList<String>()) {add("testWith")add("testWith")add("testWith")println("this = " + this)}.let { println(it) }
}
// 运行结果
// this = [testWith, testWith, testWith]
// kotlin.Unit

class文件

 public static final void testWith(){Object localObject = new ArrayList();ArrayList localArrayList1 = (ArrayList)localObject;int $i$a$1$with;ArrayList $receiver;$receiver.add("testWith");$receiver.add("testWith");$receiver.add("testWith");String str = "this = " + $receiver;System.out.println(str);localObject = Unit.INSTANCE;Unit it = (Unit)localObject;int $i$a$2$let;System.out.println(it);}

run

run函数和apply函数很像,只不过run函数是使用最后一行的返回,apply返回当前自己的对象。

fun <T, R> T.run(f: T.() -> R): R = f()

代码示例

fun testRun() {// fun <T, R> T.run(f: T.() -> R): R = f()"testRun".run {println("this = " + this)}.let { println(it) }
}
// 运行结果
// this = testRun
// kotlin.Unit

class文件

  public static final void testRun(){Object localObject = "testRun";String str1 = (String)localObject;int $i$a$1$run;String $receiver;String str2 = "this = " + $receiver;System.out.println(str2);localObject = Unit.INSTANCE;Unit it = (Unit)localObject;int $i$a$2$let;System.out.println(it);}

总结

怎么样,是不是看晕了,没关系,我们来总结下。

函数名定义参数返回值extension其他
letfun T.let(f: (T) -> R): R = f(this)it闭包返回
applyfun T.apply(f: T.() -> Unit): T { f(); return this }无,可以使用thisthis
withfun with(receiver: T, f: T.() -> R): R = receiver.f()无,可以使用this闭包返回调用方式与其他不同
runfun T.run(f: T.() -> R): R = f()无,可以使用this闭包返回
http://www.jmfq.cn/news/5126455.html

相关文章:

  • 天河网站建设价格/菏泽地网站seo
  • word超链接网站怎样做/seo长尾快速排名
  • 备案期间网站/汕头seo不错
  • 建设银行考试报名网站/做销售最挣钱的10个行业
  • 公司网站怎么做简介/手机百度网盘下载慢怎么解决
  • 中国建设银行招投标网站/创建个人网站的流程
  • 企业网站建设网站优化/网站seo技术
  • 美国站点网站怎么做/百度云手机登录入口
  • discuz安装教程/北京seo外包公司要靠谱的
  • 四川做文学有关的网站/seo是什么
  • 自驾游网站建设/正安县网站seo优化排名
  • 山东省建设局注册中心网站/seo岗位是什么意思
  • 学风建设网站版块/百度竞价被点击软件盯上
  • 廊坊制作网站公司/如何制作自己的网站?
  • 网络营销是网上销售吗/seo关键词排名优化矩阵系统
  • 北京网站建设设计公司/百度收录批量提交入口
  • 网站备案 多少钱/站长工具seo优化
  • 网站建建设公司和网络自建/seo优化关键词排名优化
  • 网站需要怎么做的吗/最近国际新闻大事20条
  • 重庆网站建站系统/网络公司优化关键词
  • 网站建设和app开发/免费下载百度seo
  • 介绍旅游美食的网站模板/网站提交入口
  • 湖北网站建设优化/网络营销岗位职责和任职要求
  • 电商实训网站建设报告/seo在哪学
  • 新增专业建设规划/百度词条优化
  • 网站浏览成交指标/电商网店
  • 北京网站设计推荐刻/网站如何赚钱
  • 资讯类网站建设/广州网站设计建设
  • 乐营销网站/seo技术培训泰州
  • 网站布局策划/培训机构网站