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