带接收者的函数字面值与解构声明详解
带接收者的函数字面值:
Kotlin提供了这样一种功能:可以通过指定的接收者对象来调用一个函数字面值。在函数字面值内部,你可以调用接收者对象的方法而无需使用任何额外的修饰符,这一点非常类似于扩展函数,下面来看一下代码:
好怪异的语法,其中看到通过“.”的方式来声明了一个Int的函数字面值,其中函数的类型是接收一个Int参数返回一个Int:
而函数体为:
下面使用一下它:
另外匿名函数语法可以让我们指定函数字面值的接收者类型,这样,我们就可以先去声明一个带有接收者的函数类型变量,然后再去使用它,下面看下代码:
注意:其函数的实现是不能放在花括号里面的,如下:
注意这俩代码的区别:
此外,带有接收者类型的函数的非字面值可以作为参数进行传递,前提是所需要接收函数的地方应该有一个接收者类型的参数,反之依然,比如说:String.(Int) -> Boolean与(String, Int)-> Boolean是等价的,下面用代码进行说明:
为了说明"String.(Int) -> Boolean与(String, Int)-> Boolean是等价的",下面用代码来论证下:
说实话,这种代码比较不好理解,需要花时间去适应。
解构声明:
直接看一下代码:
以上是传统的方式,其实可以用解构声明一次性返回多个结果,如下:
其实有个Pair系统类也可以做为方法的返回值,然后有解构声明来输出,如下:
其中Pair其实也是一个object class,如下:
这样一个方法就可以返回多个结果了,不过官方建议使用第一种纯自己定义的方式,因为比较清楚也比较灵活。