美文网首页
2.3.7 函数、Lanbda和闭包

2.3.7 函数、Lanbda和闭包

作者: AndYMJ | 来源:发表于2021-07-07 12:08 被阅读0次

在你不熟悉Kotlin语法的情况下,很容易对fun声明函数、Lambda表达式的语法产生混淆,因为它们都可以存在花括号。现在我们已经了解了它们具体的语法,可通过以下的总结来更好地区分:

1.fun在没有等号、只有花括号的情况下,是我们常见的代码块函数体,如果返回非Unit值,必须带return。

fun foo(x:Int){ print (x) }

fun foo(x:Int ,y: Int): Int{ return x*y }

2. fun 带有等号,是单表达式函数体。该情况下可以省略return。

fun foo(x:Int,y:Int) = x + y

不管是用val还是fun,如果是等号花括号的语法,那么构建的就是一个Lambda表达式,Lambda的参数在花括号内部声明。所以左侧是fun,那么就是Lambda表达式函数体,也必须通过()或invoke来调用Lambda,如:

val foo = {x:Int, y: Int - > x+y} //foo.invoke(1,2)或foo(1,2)

fun foo(x: Int) = { y: Int - >x+y}//foo(1).invoke(2)或foo(1)(2)

在Kotlin中,你会发现匿名函数体、Lanbda(以及局部函数,object表达式)在语法上都存在“{}”,由这对花括号包裹的代码块如果访问了外部环境则称为闭包。一个闭包可以被当成参数传递或者直接使用,它可以简单地看成 “访问外部环境变量的函数”。Lambda是Kotlin中最常见的闭包形式。

与Java不一样的地方在于,Kotlin中的闭包不仅可以访问外部变量,还能够对其进行修改,就像这样子:

var sun = 0;

listOf(1,2,3).filter(it - >0).forEach{

sun += it

}

》》》printlin(sun)

此外Kotlin还支持一种自运行的Lambda语法:

》》》{ x:Int - > println(x) }(1)

1

执行以上代码,结果会打印1.

相关文章

  • 2.3.7 函数、Lanbda和闭包

    在你不熟悉Kotlin语法的情况下,很容易对fun声明函数、Lambda表达式的语法产生混淆,因为它们都可以存在花...

  • rust 闭包与同步

    rust 闭包与同步 rust 闭包 rust闭包中主要包括两个部分,闭包参数和闭包环境变量。闭包函数和函数参数使...

  • 函数对象和闭包

    函数对象和闭包 一) 函数对象 示例: 二)函数嵌套 三)闭包函数

  • 面试题(day-2)

    1 ,什么是闭包?闭包有什么好处?使用闭包要注意什么? 闭包:函数嵌套函数,内部函数可以引用外部函数的参数和变量,...

  • Swift-闭包

    闭包的特点:一个函数有权访问另外一个函数内的变量和参数 闭包—匿名函数 结尾闭包 衍生 内容捕获 闭包和函数是引用类型

  • 闭包函数

    闭包函数 闭包,又称闭包函数或者闭合函数,其实和嵌套函数类似,不同之处在于,闭包中外部函数返回的不是一个具体的值,...

  • php之闭包函数(Closure)

    php闭包函数(Closure) JS闭包 js和php闭包使用和区别

  • 变量

    闭包: 什么是闭包? 函数嵌套函数,内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾机构回收; 用闭包做...

  • 变量和函数、闭包

    闭包: 什么是闭包? 函数嵌套函数,内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾机构回收; 用闭包存...

  • 13_day变量和函数、闭包

    闭包: 什么是闭包? 函数嵌套函数,内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾机构回收; 用闭包做...

网友评论

      本文标题:2.3.7 函数、Lanbda和闭包

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