Kotlin let with run apply also区别

apply also返回自身对象

let with run 都是单纯一个作用域,返回的是lambda表达式

let

let 可用于在调用链的结果上调用一个或多个函数,或者说基于代码的结果再执行相关逻辑

tabList?.let {
    
     it:ArrayList<Tab> ->
            createWebView(tabList)
        }
//tabList不为null,就执行逻辑        

it参数:it代表表达式的结果,可以基于结果做下一步操作。it也可以修改为其他标识

let 经常用于仅使用非空值执行代码块

with

with 可以理解为“对于这个对象,执行以下操作。” this关键字代表自身对象。

一个对象的一组函数调用 使用with

with(menuView) {         
	this.setMenuData(tabList!!)          
}

还可以返回一个属性或者函数,然后被执行

val name = with(view){ this:MenuView->
	"name"
}

println(name)

run

runwith 做同样的事情,但是调用方式和 let 一样。个人认为主要强调返回值的使用

1.对象配置并且计算结果

 val result = service.run {
    
    
        port = 8080
        query(prepareRequest() + " to port $port")
 }

2.在需要表达式的地方运行语句:非扩展的run

扫描二维码关注公众号,回复: 13590844 查看本文章

除了在接收者对象上调用 run 之外,还可以将其用作非扩展函数。 非扩展 run 可以使你在需要表达式的地方执行一个由多个语句组成的块。

fun main() {
    
    
//此处run返回一个对象,且初始化对象并返回
    val hexNumberRegex = run {
    
    
        val digits = "0-9"
        val hexDigits = "A-Fa-f"
        val sign = "+-"

        Regex("[$sign]?[$digits$hexDigits]+")
    }

    for (match in hexNumberRegex.findAll("+1234 -FFFF not-a-number")) {
    
    
        println(match.value)
    }
}

apply

主要应用于对象的配置,返回对象自身

val adam = Person("Adam").apply { this->
    age = 32
    city = "London"        
}
println(adam)

also

参数为it,返回自身对象

val numbers = mutableListOf("one", "two", "three")
numbers.also {
    
     println("The list elements before adding new one: $it") }
    .add("four")

猜你喜欢

转载自blog.csdn.net/chentaishan/article/details/121903769