kotlin 如何以及何时让 运行?

How and when does kotlin let run?

对于互联网上的所有示例,我无法弄清楚 kotlins 何时以及如何让 运行?

if(phones.size == 0){
        phones.add("")
    }
return phones[0]

因此,如果电话列表大小为 0,我们将添加空字符串并 return 代替。

现在如何用 let 做同样的事情?

phones.let {
    return ""
}

这是否适用于大小 0,还是我必须有空列表?

我需要 return 关键字吗?如果需要,在哪里?

上面的乐趣总是return空字符串吗?或者就在 phones 为空时?

这个 let 代码什么时候会阻塞 运行?

如果你对如何用 Kotlin 的 FP 习语编写你的逻辑感兴趣,它根本不涉及 let:

phones.takeIf { it.isEmpty() }?.add("")
return phones[0]

但是,我发现这个成语并不比你开始时使用的更好。

更新:

val cakes = listOf("carrot", "cheese", "chocolate")

fun main(args: Array<String>) {
    var cakesEaten = 0

    while (cakesEaten < 3) {  // 1
        cakesEaten ++

        val result = cakes?.let{ 

                 if(cakesEaten == 2) {
                     "HeyLo"
                 } else {
                  2   
                 }
            } 

        println("result value = $result")

        when(result) {
          is String -> println(" result variable is a String")

          is Int -> println(" result variable is Integer")
        }

      }
}
result value = 2
 result variable is Integer
result value = HeyLo
 result variable is a String
result value = 2
 result variable is Integer

原版post

如果您的 'phones' 对象是 Nullable 类型,

 val result = phones?.let{ 
                 // this block runs only if phones object is not null
                 // items can be accessed like it.size
                 // expression result will be returned. no need to mention return.
                 if(it.size == 0) {
                       it.add("")
                       it[0]   
                 } else it.size
             }

result 值将为 it[0] 或 it.size,其类型将为 Any。

但如果这是您需要的功能,您可以查看 Markos 解决方案。