Kotlin 内置函数归纳

77 阅读2分钟

apply: info.apply

  1. apply函数返回类型,永远都是info本身,此条和 also 一模一样
  2. apply函数的 匿名函数里面持有的是this == info本身 此条和 run一模一样

let: 集合.let

  1. let函数返回类型,是根据匿名函数最后一行的变化而变化 此条和 run -模一样
  2. let函数的 匿名函数里面持有的是it ==集合本身 此条和 also -模一样

run: str.run

  1. run函数返回类型,是根据匿名函数最后一行的变化而变化 此条和 let一模一样
  2. run函数的 匿名函数里面持有的是this == str本身此条和 apply-模一样

with: with(str)

  1. with和run基本上一样,只不过就是使用的时候不同
  2. with函数返回类型,是根据匿名函数最后一行的变化而变化 此条和 let一模一样
  3. with函数的 匿名函数里面持有的是this == str本身此条和 apply一模一样

also: str.also

  1. also函数返回类型,永远都是str本身此条和 apply 一模一样
  2. also函数的 匿名函数里面持有的是it == str此条和 let -模一样

总结

apply和also是一个类别,属于一类

相同点:

apply与also返回类型是一样的, 他们永远都是返回info本身. 都是匿名函数,并且最后一行无法作为返回值,但不影响函数

不同点:

  • apply{ 持有this this.setxxx()}
  • alos { 持有it it.setxxx()}

应用点:

  • val file本身= File("xx").apply { setFilexxx()... }.apply { ...}.apply{...} 链式调用
  • val file本身= FIle("xx").also { it.setEilexxx()...}.also { ... }.also{...} 链式调用

run、let和with是一个类别,属于一类

相同点

run和let返回类型都是一样的,都会根据匿名函数最后一行返回的类型而决定run和let的返回类型(是根据匿名函数最后一行的变化而变化)

不同点

匿名函数里面 with和run持有this let持有it

应用点

  • info.run { show("内容:this")show("内容长度:this") show("内容长度:length") show("${if(this is string)你是string类型 else 你不是string类型}")}
  • info.let { show("内容:it") show("内容长度:it.length")show("{it.length}") show("{if(it is string)你是string类型 else 你不是string类型}")}
  • with(info) { show("内容:this")show("内容长度:this") show("内容长度:length") show("${if(this is string)你是string类型 else 你不是string类型}")}