­

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

  • 2019 年 10 月 4 日
  • 筆記

我了方便大家阅读很不至于疲劳我们把整个拆分为两步分,接着下部分我们将with

with

with同样也是标准库的一个扩展,不同的是它不是功能性的扩展,他只是起一个承接的作用方便大家标识和转呈

fun withFun() {      class Configuration(var host: String, var port: Int)  val configuration = Configuration(host = "127.0.0.1",      port = 9800)        with(configuration) {        }.run {        }.let {        }      with("A"){          this.isBlank()      }      print("${configuration}")  }

上栗中我们分别举了一个自定义类和一个String的粒子,我们看到,内部同样是采用的this作为原有实例的引用,我们很方便的机型原有实例的调用

也就是说:with其实没啥具体的功能性作用,只是为了书写方便美观使代码更加美观……

apply

apply这个比较重要了,相信对于有JS基础的朋友这个特性并不陌生:applay内部执行一个block并且返回实例itself(自身)。这个在前面的几个中有很多的区别之前的都是返回一个object实例,也就是说这个处理返回数据并且返回的是自身,因此这个也早就了了它的作用目的可以作为数据初始化使用

fun applyFun() {      data class Person(          var name: String,          var age: Int,          var about: String      ){          constructor():this("",0,"")      }        val jake = Person()    val desc =  jake.apply {          this.name = "Jack"          this.age = 30          this.about  = "Android developer"      }.toString()      println(desc)  }

上栗中我们实例化了一个Person的无参构造的实例,然后使用apply进行其余属性的初始化赋值

also

与apply类似also也是对实例的扩展,它同样执行的是block和进行返回。不同的是它采用it走位引用,因此它多用于内部传值。比如说在链式调用中进行日志输出查看、

fun alsoFun() {      class Person(val name: String, val age: Int, val about: String)        val jacke = Person("Jack", 30, "Amdroid developer")          .also {              print("$it")          }  }  

到此我们今天的标准库扩展就告一段落,下面是一个综合的调用

  val jacke = Person("Jack", 30, "Amdroid developer")          .also {              print("$it")          }      with(Person()) {          this.apply {              name = "Lee"              age = 30              about = "iOS/Android developer"          }.run {              hell()          }      }.also {          print(it)      }