首页 > 解决方案 > 在函数文字中使用隐式变量

问题描述

我开始阅读 Kotlin 课程书。我停在函数文字上。这里我有一个代码:

val printMessage = { message: String -> println(message) }
printMessage("hello")
printMessage("world")

然后我有一个可以省略参数类型的信息:

{ message -> println(message) }

现在我有下一步了:

“事实上,Kotlin 有一个更巧妙的技巧。如果只有一个参数并且可以推断类型,那么编译器将允许我们完全省略参数。在这种情况下,它使隐式变量可用:

{println(it)}

现在使用此代码后,我收到错误“未解析的引用:它”和“公共运算符 fun invoke() 的参数太多:??? 在 kotlin.Function() 中定义”:

val printMessage = {println(it)}
printMessage("print something")

我的问题是如何在单参数函数文字中使用隐式变量?

标签: kotlin

解决方案


请参阅Kotlin 文档,特别是其中的说明:

如果编译器可以自己计算出签名,则允许不声明唯一参数并省略->. 该参数将在 name 下隐式声明it

在您的情况下,编译器(至少到当前版本 1.3.31)无法自行确定签名:

val printMessage = {println(it)}

但是如果你给你的printMessage变量一个明确的类型,它会起作用:

val printMessage: (String) -> Unit = { println(it) }

推荐阅读