参考官方文档:
https://developer.android.google.cn/codelabs/basic-android-kotlin-compose-function-types-and-lambda?hl=zh-cn#0
1、 将函数存储在变量中
- 作为一种一级结构,函数也属于数据类型,因此,可以将函数存储在变量中、将函数传递到函数,以及从函数返回函数。
- 如需将函数作为值引用,您需要使用函数引用运算符 :: 。
fun main() {val trickFunction = ::trick}fun trick() {println("No treats!")}
2、使用 lambda 表达式定义函数
-
lambda 表达式提供了简洁的语法来定义函数,无需使用 fun 关键字。您可以直接将 lambda 表达式存储在变量中,无需对其他函数进行函数引用。语法图如下:
-
使用 lambda 表达式定义函数时,有一个引用该函数的变量。还可以像对待任何其他类型一样,将其值分配给其他变量,并使用新变量的名称调用该函数。
fun main() {val trickFunction = trick// 调用方式trick()trickFunction()}val trick = {println("No treats!")}
- 在 main() 函数中,移除函数引用运算符 ::,因为 trick 现在引用的是变量,而不是函数名称。
- 在 main() 函数中,调用 trick() 函数,但这次要包含圆括号,就像您在调用任何其他函数时所做的那样。
- 同理,将 trickFunction 变量视为函数进行调用。
- 借助 lambda 表达式,您可以创建用于存储函数的变量,像调用函数一样调用这些变量,并将其存储在其他可以像函数一样调用的变量中。
3、将函数用作数据类型
- 函数类型由一组圆括号组成,其中包含可选的参数列表、-> 符号和返回值类型。语法如下图所示:
val treat: () -> Unit = {println("Have a treat!")}
- treat 变量的数据类型为 () -> Unit,圆括号为空,因为函数没有任何参数;返回值类型为 Unit,因为函数不返回任何内容。如果您的参数接受两个 Int 参数并返回 Int,则其数据类型为 (Int, Int) -> Int。
4、将函数用作返回值类型
- 函数是一种数据类型,因此您可以像使用任何其他数据类型一样使用函数。您甚至可以从其他函数返回函数。语法如下图所示:
fun trickOrTreat(isTrick: Boolean): () -> Unit {if (isTrick)