Kotlin 基础学习笔记第八章——高阶函数:Lambda作为形参和返回值

news/2024/5/4 23:04:20/文章来源:https://blog.csdn.net/liuqinhou/article/details/128262680

 

一、声明高阶函数

        高阶函数定义:高阶函数就是以另一个函数作为参数或者返回值的函数 在kotlin中,函数可以用lambda或者函数引用来表示。因此,任何以lambda或者函数引用作为参数的函数,或者返回值为lamda或函数应用的函数,或者两者都满足的函数都是高阶函数。

        1、函数类型

        为了声明一个以lamda作为实参的函数,你需要知道如何声明对应形参的类型。在这之前,我们先来看一个简单的例子,把lambda表达式保存在局部变量中。其实我们已经见过在不声明类型的情况下如何做到这一点,这依赖于kotlin的类型推导。 

        在这个例子中,编译器推导出sum和action这两个变量具有函数类型。现在我们来看看这些变量的显式类型声明是什么样的:

        声明函数类型,需要将函数参数类型放在括号中,紧接着是一个箭头函数的返回类型。 

         你应该还记得,Unit类型用于表示函数不返回任何有用的值声明一个普通的函数时,Unit类型的值是可以省略的,但是一个函数类型声明总是需要一个显式的返回类型,所以在这种场景下Unit是不能省略的

        注意,在lambda表达式{x, y -> x + y}中是如何省略参数x, y的类型的。因为它们的类型已经在函数类型的变量声明部分指定了,不需要在lamda本身的定义当中再重复声明

        就像其他方法一样,函数类型的返回值也可以标记为可空类型        

        也可以定义一个函数类型的可空变量为了明确表示是变量本身可空,而不是函数类型的返回类型可空,你需要将整个函数类型的定义包含在括号内并在括号后面添加一个问号

        注意这个例子和前一个例子的微妙区别。如果省略了括号,声明的将会是一个返回值可空的函数类型,而不是一个可空的函数的变量         

 

                              

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_233458.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计健身房预约平台Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【MySQL基础】数据库操作语言DML相关操作有那些?

目录 一、什么是DML 二、数据插入insert 三、数据的修改update 四、数据的删除delete 五、delete和truncate有什么不同? 六、DML操作知识构图 七、DML操作练习 💟 创作不易,不妨点赞💚评论❤️收藏💙一下 一、什…

OPT(奥普特)工控机新品上市,产品矩阵再扩大

近日,OPT(奥普特)发布工控机新品,进一步扩展产品矩阵,为制造业数字化转型提供更为全面的机器视觉产品和服务。 OPT(奥普特)上市的工控机共有两大系列,分别是3U桌面式和4U上架式的设…

【代码审计-.NET】基于.NET框架开发的基本特征

目录 一、.NET基本架构 1、基本构成 2、可支持语言 3、封装 4、文件 5、指向解析 6、安全认证 二、工具 1、ILSpyi 2、dnSpy 3、Reflector (网上找的一张图谱) 本博客只面向讲安全相关内容 一、.NET基本架构 1、基本构成 可支持语言&#xf…

PyTorch中学习率调度器可视化介绍

神经网络有许多影响模型性能的超参数。一个最基本的超参数是学习率(LR),它决定了在训练步骤之间模型权重的变化程度。在最简单的情况下,LR值是0到1之间的固定值。 选择正确的LR值是具有挑战性。一方面较大的学习率有助于算法快速收敛,但它也…

[论文阅读] 颜色迁移-梯度保护颜色迁移

[论文阅读] 颜色迁移-梯度保护颜色迁移 文章: [Gradient-Preserving Color Transfer], [代码未公开] 本文目的: 如题所示为梯度保护的颜色迁移方法. 1-算法原理 人类的视觉系统对局部强度差异比强度本身更敏感, 因而, 保持颜色梯度是场景保真度的必要条件, 因而作者认为: 一…

如何批量查询谷歌PR权重是多少?谷歌PR权重怎么批量查询

权重是就是网站在搜索引擎心目中的位置,如果一个网站在搜索引擎心目中的位置高的话,当然容易获得较好的排名,今天不是来跟大家聊如何提升网站权重的,而是教大家如何去看一个网站的权重,做网站的朋友都要知道要做关键词…

数据库面试题1-数据库基本概念、常用SQL语言

题1:什么是数据库 数据库(Database) 是保存有组织的数据的容器(通常是一个文件或一组文件),是通过 数据库管理系统(DataBase- Management System,DBMS) 创建和操纵的容器…

Metal每日分享,波动滤镜/涂鸦滤镜效果

本案例的目的是理解如何用Metal实现图像波动效果滤镜,还可类似涂鸦效果,主要就是对纹理坐标进行正余弦偏移处理; Demo HarbethDemo地址 实操代码 // 波动效果 let filter C7Fluctuate.init(extent: 50, amplitude: 0.003, fluctuate: 2.5…

自动驾驶两大路线对决,渐进式玩家为何更容易得人心?

HiEV消息(文/长海)对自动驾驶赛道而言,2022年的冬天格外冷冽。寒潮袭来,从各家的应变方式看,不同路径的玩家呈现“冰火两重天”,进化的趋势也越来越清晰。 以Waymo为代表、持续研发L4级无人驾驶的跨越式路线…

Python实现房产数据分析与可视化 数据分析 实战

Python库的选择 话说,工欲善其事,必先利其器,虽然我们已经选择Python来完成剩余的工作,但是我们需要考虑具体选择使用Pytho的哪些利器来帮助我们更快更好地完成剩余的工作。 我们可以看一下,在这个任务中&#xff0c…

UIAutomator测试框架介绍

uiautomator简介 UiAutomator是Google提供的用来做安卓自动化测试的一个Java库,基于Accessibility服务。功能很强,可以对第三方App进行测试,获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作,但有两个缺点…

【Docker学习教程系列】8-如何将本地的Docker镜像发布到私服?

通过前面的学习,我们已经知道,怎么将本地自己制作的镜像发布到阿里云远程镜像仓库中去。但是在实际工作开发中,一般,我们都是将公司的镜像发布到公司自己搭建的私服镜像仓库中,那么一个私服的镜像仓库怎么搭建&#xf…

【云原生】Kubernetes(k8s)Istio Gateway 介绍与实战操作

文章目录一、概述二、Istio 架构三、通过 istioctl 部署 Istio1)安装istioctl 工具2)通过istioctl安装istio3)检查四、Istio Gateway五、Istio VirtualService 虚拟服务六、示例演示(bookinfo)1)安装bookin…

笔试强训(四十一)

目录一、选择题二、编程题2.1 Emacs计算器2.1.1 题目2.1.1 题解一、选择题 (1)某主机的IP地址为180.80.77.55,子网掩码为255.255.252.0.若该主机向其所在子网发送广播分组,则目的地址可以是(D) A.180.80.7…

制作移动端整页滚动动画

制作移动端整页滚动动画 需要用到 rem7.5.js(rem适配) pageSlider.js(控制动画的js文件) 基于zepto&#xff0c;引入zepto.js文件 animate.css(动画样式) base.css(公共样式) 下面看一下页面结构 <div class"section sec1"style"background-image:url(./ima…

ASP.NET微信快速开发框架源码【源码分享】

ASP.NET微信快速开发框架源码 微信公众平台快速开发框架源码 需要源码学习&#xff0c;查看文末卡片获取&#xff0c;或私信我。 框架主要技术&#xff1a; ASP.NET MVC5、ASP.NET Identity、Bootstrap、KnockoutJs、Entity Framework等。 主要特色&#xff1a; 1、快速迭代开…

​创新不是公司的救命良药

阅读本文大概需要1.06 分钟。之前问说当整个大环境都差的时候&#xff0c;公司还有项目可做就不错了&#xff0c;不要觉得只能赚点小钱就看不上&#xff0c;现在已经从伸手抓钱&#xff0c;变成弯腰捡钱的时代了。 开始赚的钱是不多&#xff0c;但能验证方向&#xff0c;先把跑…

【Keras+计算机视觉+Tensorflow】生成对抗神经网络中DCGAN、CycleGAN网络的讲解(图文解释 超详细)

觉得有帮助麻烦点赞关注收藏~~~ 一、生成对抗网络简介 生成对抗网络(GANs&#xff0c;Generative Adversarial Nets),由Ian Goodfellow在2014年提出的,是当今计算机科学中最有趣的概念之一。GAN最早提出是为了弥补真实数据的不足&#xff0c;生成高质量的人工数据。GAN的主要思…

Java项目中集成Redis提升系统的性能

概述 安装Redis 安装 启动Rocky Linux 9.0&#xff0c;在浏览器中打开web console. 如果没有安装Web console&#xff0c;按以下步骤安装启用&#xff1a; 安装命令&#xff1a; # dnf install cockpit 启用并运行服务 # systemctl enable --now cockpit.socket 开通防火墙&…