【问题标题】:What is the `it` in Kotlin lambda body?Kotlin lambda 主体中的 `it` 是什么?
【发布时间】:2017-06-27 06:12:59
【问题描述】:

例如在下面这两个代码中:

File("./file1.txt").forEachLine { println(it) }

File("somefile.txt").bufferedWriter().use { out ->
    history.forEach {
        out.write("${it.key}, ${it.value}\n")
    }
}

在这段代码中it 是什么意思?

【问题讨论】:

标签: java file jvm kotlin


【解决方案1】:

it 变量是 lambda 中的隐式参数。

另一个有用的约定是,如果一个函数字面量只有一个参数,它的声明可以被省略(连同 ->),它的名字将是 it

【讨论】:

    【解决方案2】:

    请参考以下说明。

    it:单个参数的隐式名称

    lambda 表达式只有一个参数是很常见的。

    如果编译器可以自己找出签名,则不允许 声明唯一的参数并省略->。参数将是 以它的名字隐式声明:

    ints.filter { it > 0 } // this literal is of type '(it: Int) -> Boolean'
    

    https://kotlinlang.org/docs/reference/lambdas.html#it-implicit-name-of-a-single-parameter

    【讨论】:

      【解决方案3】:

      这是 kotlin 组织文档:it: implicit name of a single parameter

      例如

      ints.filter { value -> value > 0 }
      

      您可以将其简化为:

      ints.filter { it > 0 }
      

      虽然你不能使用

      ints.filter { value > 0 }
      

      【讨论】:

        【解决方案4】:
        val list = listOf(1,2,3,4,5,6,7).filter { it > 2 }
        for(i in list){
            println(i)
        }
        

        在本例中,列表大小为 7。使用 it,列表大小为 5。for 循环仅检查 > 2 个数字

        size = 5,输出为 3,4,5,6,7

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-10
          • 1970-01-01
          • 2021-10-16
          • 2016-09-26
          相关资源
          最近更新 更多