匿名函数定义方法go语言 go语言闭包和匿名函数

kotlin中的匿名函数&Lambda

1.匿名函数定义:匿名函数是指的没有函数名字的函数,例子如下:

创新互联建站-专业网站定制、快速模板网站建设、高性价比赵县网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式赵县网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖赵县地区。费用合理售后完善,十载实体公司更值得信赖。

fun main(){

val len ="kiiiing".count();

println(len)

val len2 ="kiiiing".count{

    it =='i'

}

println(len2)

}

其中的"kiiiing".count{} 就是匿名函数,相当于一个表达式,有返回值,这个匿名函数内部是类型为char,变量名为it的字符,相当于把kiiing字符串分解

2.匿名函数的类型和隐式返回

例子如下:

fun main(){

//函数输入输出的声明

val methodAction :() -String

//对上面函数的实现,这里是匿名函数,匿名函数没有返回值,即不需要写return,最后一行就是返回的内容

methodAction ={

      "hello"

}

println(methodAction())

}

3.匿名函数参数的学习

对比上面拆解的方式定义一个匿名无参函数,下面是一个整合形式的有参匿名函数的定义:

fun main(){

val methodAction :(Int,Int,Int) -String ={ n1, n2, n3-

    "value is ${n1},${n2},${n3}"

}

println(methodAction(1,2,3))

}

4.匿名函数中it关键字的学习

fun main(){

//如果定义了一个参数的匿名函数,默认it参数名字

val methodAction2 : (String) -String ={

it

}

}

5.匿名函数的类型推断

fun main(){

//匿名函数的返回值推断

val methdFunction ={ v1:Double, v2:Float, v3:Int -

      ""

}

}

6.lambda的学习

fun main(){

//匿名函数 == lambda表达式

val addNumResult ={ number:Int, number2:Int -

    "两数相加的和:${number + number2}"

}

println(addNumResult(3,5))

//匿名函数返回Any类型,lambda表达式的参数Int, lambda表达式结果Any类型

val weekResumtMethod ={ number:Int -

    when(number) {

1 -"星期一"

        2 -"星期二"

        3 -"星期三"

        4 -"星期四"

        5 -"星期五"

        else - -1

    }

}

println(weekResumtMethod(3))

}

7.匿名函数中参数是函数的函数

fun main(){

loginApi("king","1234",responseResult = { reason:String,code:Int -

    println("登陆情况${reason}")

})

}

const val USER_NAME_SAVE_DB ="king"

const val USER_NAME_SAVE_PWD ="1234"

fun loginApi(username:String, userpassword:String, responseResult :(String,Int) -Unit){

if(username ==null || userpassword ==null){

TODO("用户名密码为空")//出现问题,终止程序

}

if(username.length 3 userpassword.length 3){

if(webServiceLoginApi(username,userpassword)){

//登陆成功

          responseResult("login success",200);

}else{

//登陆失败

          responseResult("login failed",400);

}

}else{

TODO("用户名密码不合格")

}

}

private fun webServiceLoginApi(name:String,passowrd:String) :Boolean{

return if(name ==USER_NAME_SAVE_DB passowrd ==USER_NAME_SAVE_PWD){

true

}else{

false

}

}

8.匿名函数参数是函数的函数的简化写法

fun main(){

//第一种写法

loginApi2("king","1234",{ reason:String,code:Int -

    println("登陆情况${reason}")

})

//第二种写法

loginApi2("king","1234",responseResult = { reason:String,code:Int -

    println("登陆情况${reason}")

})

//第三种方式

loginApi2("king","1234"){ reason:String,code:Int -

    println("登陆情况${reason}")

}

}

9.匿名函数的内联学习

--如果一个函数的参数没有lambda,就不需要声明成内联

--如果一个函数的参数有lambda表达式

(1)如果一个函数不使用内联,在使用前会生成多个对象来完成lambda的调用

(2)如果一个函数使用内联,相当于c++中的宏定义,宏替换

结论:如果函数参数有lambda,尽量使用incline关键帧,内部会做优化,减少函数,对象开辟的损耗

10.函数引用

函数引用是指 把普通函数 变成 函数类型的对象

::函数名 可以转换成对象,一个函数lambda参数

fun main(){

loginApi("king","1234",::excuteResponseResult)

}

fun excuteResponseResult(reason:String,code:Int){

println("success")

}

const val USER_NAME_SAVE_DB4 ="king"

const val USER_NAME_SAVE_PWD4 ="1234"

fun loginApi3(username:String, userpassword:String, responseResult :(String,Int) -Unit){

if(username ==null || userpassword ==null){

TODO("用户名密码为空")//出现问题,终止程序

}

if(username.length 3 userpassword.length 3){

responseResult("login success",200);

}else{

TODO("用户名密码不合格")

}

}

11.函数类型作为返回类型

fun main(){

show("")

}

fun show(value:String) : (String,Int) -String{

return {name:String,age:Int -

    ""

}

}

Golang入门到项目实战 | golang匿名函数

go语言函数不能嵌套,但是在函数内部可以定义匿名函数,实现一下简单功能调用。

所谓匿名函数就是,没有名称的函数。

语法格式如下:

当然可以既没有参数,可以没有返回值

运行结果

自己执行

运行结果

go语言中函数定义让我搞蒙了

从语法讲,重载是扩展了函数(或方法)签名,从只认名字变为名字+参数类型,所以题主这个例子只要把不同参数的foo函数改成不同名字就好,比如foo1,foo2……

这个不支持按官方说法,是为了保持语法简单,以及避免工程中遇到一些问题,比如参数隐式转换等等

而支持重载的语言也有它们的道理,有时候,函数或方法名字不是程序员自己能控制的,比如说,如果java不支持重载,那么只能有一个构造函数,通过不同输入构造对象就比较麻烦,需要弄成静态方法create的方式:


当前文章:匿名函数定义方法go语言 go语言闭包和匿名函数
地址分享:http://myzitong.com/article/dochdjj.html