zoukankan      html  css  js  c++  java
  • 带接收者的函数字面值与解构声明详解

    带接收者的函数字面值:

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

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

    而函数体为:

    下面使用一下它:

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

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

    注意这俩代码的区别:

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

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

     

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

    解构声明:

    直接看一下代码:

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

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

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

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

  • 相关阅读:
    【Mysql】Mysql常见的日志种类及作用
    【Mysql】执行sql的过程
    【Mysql】回表查询原理,利用联合索引实现索引覆盖
    【Mysql】explain详解与索引最佳实践
    【Mybatis】MyBatis源码编译
    【Mysql】MySQL数据存储文件详解
    【LoadRunner-工作原理】
    【LoadRunner-简介】
    【LoadRunner-基础篇】
    【LoadRunner-基础篇】
  • 原文地址:https://www.cnblogs.com/webor2006/p/11519460.html
Copyright © 2011-2022 走看看