kotlin - 在函数文字中使用隐式变量
问题描述
我开始阅读 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 文档,特别是其中的说明:
如果编译器可以自己计算出签名,则允许不声明唯一参数并省略
->
. 该参数将在 name 下隐式声明it
。
在您的情况下,编译器(至少到当前版本 1.3.31)无法自行确定签名:
val printMessage = {println(it)}
但是如果你给你的printMessage
变量一个明确的类型,它会起作用:
val printMessage: (String) -> Unit = { println(it) }
推荐阅读
- node.js - 当活动套接字只有一个时,NodeJs 无法监听 socket.io 私有通道
- javascript - 打字稿不理解字符串数组中的第一项是字符串
- python - 为什么列表索引超出范围?
- android - 短暂显示图像 - Android
- c++ - MPSC 队列设计问题(线程无法加入)
- reactjs - Nextjs 公用文件夹,下一个路由不起作用
- python - 为什么会重复这么多次?
- python - 为什么 FloodFill 算法超过了 Leetcode 的最大递归限制?
- javascript - 刷新页面时如何制作始终具有正确数字的计数器
- python - 如何仅打印 python curl 的输出