美文网首页
kotlin-高阶函数

kotlin-高阶函数

作者: JuliusL | 来源:发表于2020-11-21 11:53 被阅读0次

定义:一个用函数作为参数或者返回值的函数
如何定义:()->Unit 括号里面代表函数的参数,箭头后面代表函数的返回值。
传递一个函数,或要将这个函数赋值给一个变量的时候,需要在函数前面加双冒号。
这个双冒号的写法,叫函数引用Function Reference
加了两个冒号,这个函数才变成了一个对象。
在kotlin里 [ 函数可以作为参数 ] 这件事的本质是函数可以作为对象存在。
因为只有是对象才可以被作为参数传递。
kotlin中函数就是函数,不是对象。
kotlin选择创建一个和函数具有相同功能的对象(用双冒号)。
一个指向对象的引用。
这个对象不是函数本身,而是一个和这个函数具有相同功能的对象。
怎么相同?你可以怎么用这个函数,就可以怎么用它(加了双冒号的对象)。
只有函数类型的对象,才能调用invoke(在函数对象后面直接加括号是kotlin的语法糖)。
函数就是函数,它和对象是两个维度的东西。
双冒号表达的是它是一个指向对象的引用,而不是指向函数本身。
而是指向一个我们在代码中看不见的对象。
这个对象复制了原函数的功能。

fun a(params: (Int) -> String) {
    println("aaa")
}

fun b(int: Int): String {
    return "acb"
}

fun main() {
    a(::b)
    val c = ::b
    c.invoke(1)
    c(2)
}

除了用双冒号引用,还可以直接把函数挪过来写
这种写法叫匿名函数
注:d不是函数的名字,而是变量的名字,指向这个匿名函数类型的对象。

val d = fun(param: Int): String {
    return param.toString()
}

val z : (Int)->String = {
     it.toString()
}

val y: () -> Unit = {
    println("hahaha")
}

val w = {
    println("???")
}

如果Lambda是函数的最后一个参数,可以把lambda写在括号外面,
而如果lambda是函数唯一的参数,可以把参数省略,用it指代这个参数
lambda的返回值不是用return,而是取最后一行代码的值

kotlin的匿名函数其实不是函数,而是个对象,它和(::+函数名)是一个东西。
同理Lambda也是一个函数类型的对象。

相关文章

  • kotlin从入门到看开 ₆

    layout: posttitle: "kotlin-高阶函数"subtitle: "这个世...

  • Kotlin-高阶函数的使用(二)

    文章目录: Kotlin-高阶函数的使用(一) 上一篇文章带大家认识到了什么是高阶函数,那这一章就带大家看看高阶函...

  • Kotlin使用技巧(一)-接口与命名参数的优雅运用

    抛出问题 看过我的Kotlin-高阶函数的使用(二)都知道,我们的setOnClickListener可以这样写:...

  • Kotlin-高阶函数

    函数入门 今天我们来讲解Kotlin的函数一说到函数,很多同学可能脑子里面是这样的一个概念。 我们高中数学经常与函...

  • Kotlin-高阶函数

    介绍 Kotlin是函数式编程,所以可以把函数作为参数传递给函数,或者作为函数的返回值使用,我们称其为高阶函数。本...

  • kotlin-高阶函数

    定义:一个用函数作为参数或者返回值的函数如何定义:()->Unit 括号里面代表函数的参数,箭头后面代表函数的返回...

  • Kotlin-高阶函数

    高阶函数的作用 就是用来定义函数式编程里面接收Lambda表达式的函数。 高阶函数的定义 如果一个函数接收另一个函...

  • Kotlin-高阶函数的使用(一)

    1.定义:什么是高阶函数 高阶函数就是以另一个函数作为参数或返回值的函数,Kotlin可以以lambda或参数引用...

  • python学习(三)函数式编程

    高阶函数 函数也是变量,函数参数为函数的函数,称作高阶函数 自定义高阶函数 内建高阶函数 map/reducema...

  • 11.Lambda和高阶函数(Lambda and Higher

    高阶函数 kotlin_Lambda,高阶函数 *swift_高阶函数

网友评论

      本文标题:kotlin-高阶函数

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