kotlin - 我什么时候在 Kotlin 中使用另一个没有参数的函数?
问题描述
我是 Kotlin 的新手。我发现我可以使用另一个没有参数的函数,即使它有。让我知道什么时候可以使用它。
Q1) 为什么我可以使用 2 种类型?(带参数&不带参数)是Kotlin的特性吗?Q2) 这是什么意思?((结果!)-> 单位)!
解决方案
看起来你很困惑,你永远不能使用没有参数的函数。如果函数有参数,那么你必须以某种方式填充槽。
与您所指的内容最接近的是参数的默认值。
fun example(boolean: Boolean = true) {}
example()
example(true)
example(false)
您可以省略该参数,因为它已在函数签名中默认。
文档_
您在图像文件中显示的是 lambda。
在第一个示例中:
signIn(listener: Session...)
这似乎是一个回调。所以它会是一个接口,也可能是一个在异步操作完成时调用的抽象类。
第二个例子,它是作为 lambda 实现的回调
signIn() { result ->
//do something
}
在 Kotlin 中,如果最后一个参数是 lambda 或可以实现为 lambda 的东西,则可以将其移出语法糖的括号。lambda 就像一个匿名函数,它是一个函数的文字。
例如,您可以声明一个 lambda:
val lambda = {text: String -> text.lenght % 2 == 0}
fun setRuleForText(rule: (String)-> Boolean) {...}
setRuleForText(lambda)
setRuleForText() { text: String
text.isNotEmpty()
}
在这种情况下,参数是一个 kotlin 函数。参数rule
是一个接收 aString
作为参数并返回的函数Boolean
。需要指出的是,表达式返回最后写入的值而不需要保留return
字。
这是文档。在这里你可以从一个很好的来源看到更多关于函数的信息(作者是经过 Jetbrains 培训的 Kotlin 认证)
在您的情况下(Result) -> Unit
,意味着 lambda 应该接收一个Result
类型作为参数然后返回Unit
(单元就像 Java 中的 void 但不止于此),没有显式返回类型。
signIn() { result ->
//do something
}
大多数类型,lambdas 上的参数是自动推断的,但如果不是,那么
signIn() { result: Result ->
//do something
}
推荐阅读
- java - 为什么 List.contains(Object) 的行为不同?
- r - 如何在同一个数据帧上做colsum和average
- powerbi - 使用 DAX 生成日期系列
- javascript - 仅在服务器上需要一个包
- java - Intellij IDEA 仅针对所有未提交的更改运行测试
- regex - 在换行符之前匹配字符,不包括空格?
- macos - MacOS - 使用带有launchd的脚本 - 启动,登录,注销,关闭?
- service-worker - Workbox 的服务人员在更改时未更新
- python - AllenNLP 共指分辨率的多 GPU 训练
- reactjs - 事件处理程序中带有 [name] 的 PrevState