【问题标题】:How and when does kotlin let run?kotlin 如何以及何时让运行?
【发布时间】:2019-08-13 09:07:53
【问题描述】:

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

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

所以如果电话列表大小为 0,我们添加空字符串并返回它。

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

phones.let {
    return ""
}

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

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

上面的乐趣总是会返回空字符串吗?或者只是当手机为空时?

什么时候让代码块运行?

【问题讨论】:

标签: kotlin let


【解决方案1】:

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

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

但是,我不觉得这个成语比你刚开始的更好。

【讨论】:

    【解决方案2】:

    更新

    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
    

    原帖

    如果你的 '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 解决方案。

    【讨论】:

    • "将是 it[0] 或 it.size" 但这不是 OP 的代码所做的 - 它只返回 it[0],从不返回 it.size。 “它的类型将在运行时推断出来”——这是什么意思?编译器在编译时“推断”的类型。在运行时,类型不会被推断出来,它们是准确已知的,任何不匹配(如强制转换表达式)都会导致运行时错误。
    • 这里,如果block是一个表达式,那么它可以是一个字符串或int,它会被传递到结果@ErwinBolwidt
    • OP 的问题中没有类似的东西。 op 的表达式返回一个字符串
    • @ErwinBolwidt 我已经用工作示例和结果更新了帖子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    相关资源
    最近更新 更多