美文网首页
2.3.3 函数的类型

2.3.3 函数的类型

作者: AndYMJ | 来源:发表于2021-07-04 22:31 被阅读0次

在Kotlin中,函数类型的格式非常简单,举个例子:

(Int)->Unit

从中我们发现,kotlin中的函数类型声明需遵循以下几点:

1.通过->符号来组织参数类型和返回值类型,左边是参数类型,右边是返回值类型;

2.必须用一个括号来包裹参数类型;

3.返回值类型即时是Unit,也必须显式声明。

如果是一个没有参数的函数类型,参数类型部分就用()来表示。

()->Unit

如果是多个参数的情况,那么我们就需要用逗号来进行分隔,如:

(Int,String) ->Unit

此外,kotlin还支持为声明参数指定名字,如下所示:

(errCode:Int,errMsg:String)->Unit

如果该函数类型的变量也是可选的话,我们还可以把整个函数类型变成可选:

((errCode :Int ,errMsg:String?)->Unit)?

这种组合是不是非常有意思?还没完,我们说过,高阶函数还支持返回另一个函数,所以还可以这么做

(Int)->((Int)->Unit)

这表示传入一个类行为int的函数,然后返回另一个类型为(Int)->Unit的函数。简化它的表达,我们可以把后半部分的括号给省略:

(Int)->Int->Unit

需要注意的是,以下的函数类型则不同,它表示的传入一个函数类型的参数,再返回一个Unit。

((Int)->Int)->Unit

好了,,在学习了Kotlin函数类型知识之后,Shaw便重新定义了filterCountries方法的参数声明。

那么问题来了。我们如何才能把代码清单2-1中的isBigEuropeanCountry方法传递给filterCountries啦?直接把isBigEuropeanCountry当参数可定不行,因为函数名并不是一个表达式,不具有类型信息,它在带上括号、被执行后才存在值。可以看出,我们需要的是一个单纯的 方法引用表达式,用它在filterCountries内部来调用参数。下一节我们会具体介绍如何使用这种语法。

2.3.4 方法和成员引用

kotkin存在一种特殊的语法,通过两个冒号来实现对于某个类的方法进行引用。以上面的代码为例,假如我们有一个CountryTest类的对象实例countryTest,如果要引用它的isBigEuropeanCountry方法,就可以这么写:countryTest::isBigEuropeanCountry

------------------

为什么使用双冒号的语法?

如果你了解C#,会知道他也有类似的方法引用特性,只是语法上不同,是通过点号实现的。然而,C#的这种方式存在二义性,容易让人混淆方法引用表达式与成员表达式,所以Kotlin采用::(沿袭了Java 8 的习惯),能够让我们更加清晰的认识这种语法。

-----------------

此外,我们还可以直接通过这种语法,来定义一个类的构造方法引用变量。

可以发现,getBook的类型为(name:String)->Book 。类似的道理,如果我们要引用某个类中的成员变量,如Book类中的name,就可以这样引用

Book::name

以上创建的Book::name的类型为(Book)->String。当我们在对Book类对象的集合应用一些函数式API的时候,这会显得格外有用,比如:

我们会在6.2节再次提到这种应用。于是,Shaw便使用了方法引用来传递参数,以下的调用果真奏效了。

经过重构后的程序显然比之前要优雅许多,程序可以根据任意的筛选需求,调用同一个filterCountries方法来获取国家数据。


相关文章

  • 2.3.3 函数的类型

    在Kotlin中,函数类型的格式非常简单,举个例子: (Int)->Unit 从中我们发现,kotlin中的函数类...

  • 2.3.3 attribute()和attr()函数

    2.3.3 attribute()和attr()函数 attribute(object)返回对象object的各种...

  • TypeScript 函数

    TypeScript 函数 函数类型 为函数定义类型 使用这种方式,为函数定义返回的类型 书写函数类型 书写函数类...

  • Swift5-外行零基础入门_12-函数(下)

    函数 函数类型作为参数类型,函数类型作为返回类型,嵌套函数 函数类型 关于数据类型,我们之前已经介绍过了。现在来回...

  • Swift探索(七): 闭包

    一:函数类型 每个函数都有种特定的函数类型,函数的类型由函数的参数类型和返回类型组成。 上述代码中 (Double...

  • 四、函数进阶

    一. 高阶函数 参数类型包含函数类型或返回值类型为函数类型的函数为高阶函数。 常见的高阶函数 高阶函数的调用 二....

  • 解决上传 ipa 到苹果商店后无法构建版本的问题

    HBuilderX 版本:2.3.3,对应的 SDK 版本:2.3.3,Xcode 版本:10.1HBuilder...

  • 每天学一点Swift----函数(二)

    三.函数类型 1. Swift的每个函数都有类型的,函数类型由函数的形参列表,返回值类型组成。 2.使用函数类型定...

  • 函数类型与闭包

    函数类型 函数类型定义:(参数类型1,参数类型2,……)->返回值类型 函数类型是一种引用类型,类似于函数指针。可...

  • 数据绑定

    环境 as 2.3.3 gradle 插件 2.3.3 Module(app)## xml 那么对应的在Activ...

网友评论

      本文标题:2.3.3 函数的类型

      本文链接:https://www.haomeiwen.com/subject/galvultx.html