转向Kotlin——高阶函数与Lambda表达式

在调用高阶函数时使用Lambda表达式,可以使调用语法更加简洁,不过要想使用这种调用方式,就需要深入了解Lambda表达式的用法。

高阶函数

高阶函数是一种特殊的函数:它接受函数作为参数,或者返回一个函数。

先看一个例子:

    fun progress(param: (name: String) -> String) {
        var result = param("hello ")
        Log.e("jia", "" + result)
    }

progress就是一个高阶函数,它接收一个函数作为自己的参数,声明形参名为param。而且这个参数传入一个String类型的name,返回一个String值。在progress函数体中可以使用该函数。

看下如何使用:

fun normalFun(name: String): String {
    return name + "北京"
}

progress(::normalFun)

将函数作为参数值传入高阶函数,需要再函数名前加两个冒号(::)作为标记。当然也可以采用Lambda表达式,如下:

progress({ name -> name + "上海" })

Lambda表达式和匿名函数

Lambda表达式,或者称为匿名函数,是一种“函数字面值”,也就是一个没有声明的函数,但是可以作为表达式传递出去。

progress({ name -> name + "上海" })

progress是一个高阶函数,它接收一个函数作为参数。参数是一个表达式,本身又是一个函数,也就是说,它是一个函数字面量。

函数类型

对于接受另一个函数作为自己参数的函数,我们必须针对这个参数指定一个函数类型,例如上方提到的progress函数,参数param的类型是 (name: String) -> String 。在函数progress内部,param作为一个函数使用,并传递给param一个String参数。

Lambda表达式语法

Lambda表达式的完整语法形式,也就是函数类型的字面值。

var sum1 = { x: Int, y: Int -> { x + y } }

Lambda表达式包含在大括号内,在完整的语法形式中,参数声明在小括号内,参数类型的声明可选,函数体在“->”符号之后。如果Lambda表达式自动推断的返回值类型不是Unit,那么在Lambda表达式函数体中,最后一条(或者是唯一一条)表达式会被当做整个Lambda表达式的返回值。

如果把可以去掉的部分全部省略,可以写成这样:

var sum2: (Int, Int) -> Int = { x, y -> x + y }
匿名函数

上面讲到的Lambda表达式语法,还有一点没有说明,就是可以指定函数返回值类型。大多数情况下,不需要指定函数类型,因为可以自动推断出。但是,需要明确指定返回值类型,就可以选择另一种语法——匿名函数。

fun(item) = item > 0

匿名函数看起来和通常的函数声明很相似,区别在于省略了函数名。函数体可以是一条表达式,也可以是多条语句。

调用例如:

ints.filter(fun(item) = item > 0)
闭包

Lambda表达式、匿名函数可以访问它的闭包,也就是定义在外层范围中的变量。与Java不同,闭包中捕获的变量是可以修改的,而在Java中必须用final声明。

 var sun = 0
        ints.filter(fun(item) = item > 0).forEach {
            sun += it
        }

总结

高阶函数和Lambda表达式听起来似乎很“高端”,其实它们在使用上并没有多么复杂,尤其是Lambda表达式,许多高级语言都支持。慢慢熟悉吧。

更多内容,欢迎关注我的微信公众号——Android机动车

这里写图片描述

内容概要:本文详细探讨了基于MATLAB/SIMULINK的多载波无线通信系统仿真及性能分析,重点研究了以OFDM为代表的多载波技术。文章首先介绍了OFDM的基本原理和系统组成,随后通过仿真平台分析了不同调制方式的抗干扰性能、信道估计算法对系统性能的影响以及同步技术的实现分析。文中提供了详细的MATLAB代码实现,涵盖OFDM系统的基本仿真、信道估计算法比较、同步算法实现和不同调制方式的性能比较。此外,还讨论了信道特征、OFDM关键技术、信道估计、同步技术和系统级仿真架构,并提出了未来的改进方向,如深度学习增强、混合波形设计和硬件加速方案。; 适合人群:具备无线通信基础知识,尤其是对OFDM技术有一定了解的研究人员和技术人员;从事无线通信系统设计开发的工程师;高校通信工程专业的高年级本科生和研究生。; 使用场景及目标:①理解OFDM系统的工作原理及其在多径信道环境下的性能表现;②掌握MATLAB/SIMULINK在无线通信系统仿真中的应用;③评估不同调制方式、信道估计算法和同步算法的优劣;④为实际OFDM系统的设计和优化提供理论依据和技术支持。; 其他说明:本文不仅提供了详细的理论分析,还附带了大量的MATLAB代码示例,便于读者动手实践。建议读者在学习过程中结合代码进行调试和实验,以加深对OFDM技术的理解。此外,文中还涉及了一些最新的研究方向和技术趋势,如AI增强和毫米波通信,为读者提供了更广阔的视野。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值