【Kotlin】—— 函数字面值(量)补充

之前在学习 Kotlin 的时候,有整理了一篇关于 函数字面值 的博客。然后今天再回顾相关知识点的时候,感觉对这个概念加深了一点理解,而且之前那篇文章可能说得不太明白,于是这里又整理下相关的想法,做一个补充,希望能够帮助大家更加通俗的理解这个概念。

首先,函数字面值(量)即一段函数文本,说白了就是一段代码,可以当作参数来传递


比如下面的:

var tmp: ((Int) -> Boolean)? = null

定义了一个变量 tmp,而该变量的类型就是 (Int) -> Boolean 这一函数类型(可为空的),该类型的函数,需要传递一个 Int 类型的参数,返回 Boolean 类型的值。

这就跟下面的是类似

var tmp2: String? = null

定义一个变量 tmp2,而该变量的类型就是 String 类型,即字符串类型。

当然, tmp 暂时只是定义了类型,然后如果给它赋值的话,可以是:

// 1-1
// num 即对应 Int 类型的参数,(num>10) 是一个表达式,对应着 Boolean 类型的返回值
tmp = { num -> (num > 10) }

此时,num -> (num > 10) 即是一个函数字面值,或者说,这个函数字面值即指的是 num -> (num > 10)

(题外话,如果函数只有一个参数的话,则该参数可以省略,默认以 it 关键字代替)
在这里插入图片描述

当然,tmp 的具体实现是不定的,可以是上面写的那样,也可以是:

// 2-1
tmp = { num -> (num >= 0) }

这里就对应另外一种函数字面值了。

以上说到的两种不同的函数字面值,他们唯一的共同点就是属于 (Int) -> Boolean 类型。

接下来还有一点,既然是变量,就可以作为方法参数传递,比如我定义一个方法:

fun method(a: ((Int) -> Boolean)?) {
    val b = a?.invoke(3)
    println(b)
}

该方法的参数 a 同样也是 (Int) -> Boolean 这一函数类型,因此,在使用该 method() 方法时,就可以传递之前的两种函数字面值,即 1-11-2 两种不同的函数字面值。然后通过 invoke() 来触发其执行,当然,需要传递一个 Int 类型的参数。

// 2-1
method({ num -> (num > 10) })
// 2-2
method({ num -> (num >= 0) })

对于 1-1 对应的函数字面量,其执行结果就为 false,即会打印 fasle;
对于 1-2 对应的函数字面量,其执行结果就为 true,即会打印 true;


类比到 Java 中,其实就类似于定义一个只有一个方法的接口,前面说的 “函数类型” 即对应该接口类型,而函数字面值,则对应着接口方法的具体实现。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值