带接收者的函数字面值与解构声明详解

带接收者的函数字面值:

Kotlin提供了这样一种功能:可以通过指定的接收者对象来调用一个函数字面值。在函数字面值内部,你可以调用接收者对象的方法而无需使用任何额外的修饰符,这一点非常类似于扩展函数,下面来看一下代码:

 

好怪异的语法,其中看到通过“.”的方式来声明了一个Int的函数字面值,其中函数的类型是接收一个Int参数返回一个Int:

 

而函数体为:

下面使用一下它:

另外匿名函数语法可以让我们指定函数字面值的接收者类型,这样,我们就可以先去声明一个带有接收者的函数类型变量,然后再去使用它,下面看下代码:

注意:其函数的实现是不能放在花括号里面的,如下:

注意这俩代码的区别:

此外,带有接收者类型的函数的非字面值可以作为参数进行传递,前提是所需要接收函数的地方应该有一个接收者类型的参数,反之依然,比如说:String.(Int) -> Boolean与(String, Int)-> Boolean是等价的,下面用代码进行说明:

为了说明"String.(Int) -> Boolean与(String, Int)-> Boolean是等价的",下面用代码来论证下:

 

说实话,这种代码比较不好理解,需要花时间去适应。

解构声明:

直接看一下代码:

 

以上是传统的方式,其实可以用解构声明一次性返回多个结果,如下:

 

其实有个Pair系统类也可以做为方法的返回值,然后有解构声明来输出,如下:

 

其中Pair其实也是一个object class,如下:

 

这样一个方法就可以返回多个结果了,不过官方建议使用第一种纯自己定义的方式,因为比较清楚也比较灵活。

posted on 2019-09-14 16:26  cexo  阅读(1605)  评论(0编辑  收藏  举报

导航