run可以在使用前加入 空值判断
with不可以
所以with可以用在变量初始化
val okHttpClient2 = with(OkHttpClient.Builder()){
callTimeout(30,TimeUnit.SECONDS)
}
val okHttpClient3 = OkHttpClient.Builder().run{
callTimeout(30,TimeUnit.SECONDS)
}
扩展函数作用域中,let的it指代对象,操作返回对原对象的修改。返回新对象,地址变了。
also返回原对象
比较下面的链式操作
makeDir返回的类型是let函数返回的File
makeDir2返回的类型是第2个let返回的Boolean,因为mkdirs()函数返回布尔类型
fun makeDir(path: String) = path.let{ File(it) }.also{ it.mkdirs() }
fun makeDir2(path: String) = path.let{ File(it) }.let{ it.mkdirs() }