Kotlin Lambda函数中的类型推断不起作用

时间:2019-01-24 11:23:35

标签: kotlin

我的lambda:

val streetNumber: Int = {
        num: Int -> num / 4
}

我怎么会收到此错误:

error: type mismatch: inferred type is (Int) -> Int but Int was expected
val streetNumber: Int = {
                        ^

我对代码块的了解是

  1. 第一个Int表示我正在返回Int类型。
  2. 第二个Int表示我已将num的类型声明为Int

这些陈述中有什么不对吗?

3 个答案:

答案 0 :(得分:1)

在这种情况下,您的变量类型Int不正确,而是您要执行的操作:

val streetNumber: (Int) -> Int = {
    num: Int -> num / 4
}

答案 1 :(得分:0)

声明:

val streetNumber: Int

表示streetNumber的数据类型为Int,而不是表示返回类型为Int
因此这与赋值冲突:

val streetNumber = { num: Int -> num / 4 }

在这些情况下,请信任推断的数据类型(Int) -> Int

变量streetNumber不是引用整数值的变量,例如:val x: Int = 0
它是一个引用Lambda expression的变量,该变量返回整数值。
您可以像这样使用它:

val streetNumber = { num: Int -> num / 4 }
val x: Int = streetNumber(12)
println(x)

将打印

3

答案 2 :(得分:0)

您可以轻松地做到,

val streetNumber= {
    num: Int -> num / 4
}

然后像这样称呼

val number=40
println(div(number))

这是做这件事的最简单方法。