Kotlin标准函数(语法糖)let with run also apply快速讲解

目录

1、知识储备——扩展函数

原理

定义扩展函数

调用扩展函数

2、返回值为上下文对象的标准函数

apply

also

3、返回值为Lambda表达式结果

let

run

with

4、一表总结


1、知识储备——扩展函数

原理

Kotlin 在不继承父类或实现接口下,也能扩展一个类的新功能

定义扩展函数

fun 类A.扩展方法(参数):返回值类型 { }

调用扩展函数

val 新对象 =  类A()
val 获取返回值 = 新对象.扩展方法(传参数)

2、返回值为上下文对象的标准函数

apply

  • 对象引用为this(可省略)
  • 返回对象本身
  • 系统自带的扩展函数
    val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")val result = StringBuilder().apply {append("Start eating fruits. \n")for (fruit in list) {append(fruit).append("\n")}append("Ate all fruits.")}

讲解:这里创建一个集合,StringBuilder对象创建后调用apply函数,StringBuilder相关方法直接调用即可,或this.方法名调用也可;最后这个对象整体返回给result变量

also

  • 对象引用为it(可自定义,但是不可省略)
  • 返回对象本身
  • 系统自带的扩展函数
    val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")val result = StringBuilder().also {append("Start eating fruits. \n")for (fruit in list) {it.append(fruit).append("\n")}it.append("Ate all fruits.")}
//或者自定义引用val result = StringBuilder().also {temp->append("Start eating fruits. \n")for (fruit in list) {temp.append(fruit).append("\n")}temp.append("Ate all fruits.")}

讲解:与apply最大区别就是调用自身方法或属性,需要用it或自定义的名字来调用;最后也是将整体返回给result

3、返回值为Lambda表达式结果

let

  • 引用对象为it
  • 返回let函数最后一行非赋值语句值,否则返回Unit
  • 系统自带的扩展函数
//letResult接收Unit
val letResult:Int? = book.let { bookEntry: Book ->bookEntry.changePrice(100)bookEntry.name = "letResult"
}//letResult接收100
val letResult:Int? = book.let { bookEntry: Book ->bookEntry.changePrice(100)bookEntry.name = "letResult"100
}

run

  • 引用对象为this(可省略)
  • 返回run函数最后一行非赋值语句值,否则返回Unit
  • 系统自带的扩展函数
//输出结果:  修改完成  阿文2fun main() {val data = Data("阿文", 18)val reslut = data.run {name = "阿文2""修改完成"}println(reslut)println(data.name)
}

with

  • 引用对象为this(可省略)
  • 返回run函数最后一行非赋值语句值,否则返回Unit
  • 非扩展函数
val withResult = with(book) {changePrice(300)name = "withResult"this //也可以把这个对象作为返回值
}
println("withResult $withResult")

讲解:和run用法不同,但是引用对象和返回方式是一模一样的

4、一表总结

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

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

相关文章

N-(4-Azido-2-nitrophenyl)-N‘‘-biotinylnorspemidine

​一、基本信息 常用名:N-(4-Azido-2-nitrophenyl)-N-biotinylnorspemidine 英文名:N-(4-Azido-2-nitrophenyl)-N-biotinylnorspemidine CAS号:786609-83-4 分子式:C22H33N9O4S 分子量:519.62 二、结构特点 该化…

数据(图像)增广

一、数据增强 1、增加一个已有数据集,使得有更多的多样性,比如加入不同的背景噪音、改变图片的颜色和形状。 2、增强数据是在线生成的 3、增强类型: (1)翻转 (2)切割 (3&#xf…

LLM大模型应用中的安全对齐的简单理解

LLM大模型应用中的安全对齐的简单理解 随着人工智能技术的不断发展,大规模语言模型(如GPT-4)的应用越来越广泛。为了保证这些大模型在实际应用中的性能和安全性,安全对齐(Safe Alignment)成为一个重要的概…

struts2如何防止XSS脚本攻击(XSS防跨站脚本攻击过滤器)

只需要配置一个拦截器即可解决参数内容替换 一、配置web.xml <filter><filter-name>struts-xssFilter</filter-name><filter-class>*.*.filters.XssFilter</filter-class></filter><filter-mapping><filter-name>struts-xss…

存储实验:Linux挂载iscsi硬盘与华为OceanStor创建LUN全流程

目录 目的环境规划实验实验流程Centos配置0. 关闭防火墙1. 设置网卡信息2. 配置路由3. iscsiadm连接存储 iSCSI LUN创建&#xff08;以华为OceanStor为例&#xff09;验证1. 验证是否成功2. 开启自动挂载 目的 实现Linux连接iscsi硬盘&#xff0c;同时实现开机自启挂载 环境规…

浅谈全量微调和PEFT高效微调(LoRA)

浅谈全量微调和LoRA微调 全量微调Full Fine-Tuning 全量微调是指在预训练的大型模型基础上调整所有层和参数&#xff0c;‌使其适应特定任务的过程。‌这一过程使用较小的学习率和特定任务的数据进行&#xff0c;‌可以充分利用预训练模型的通用特征 高效微调 高效微调&…

MongoDB自学笔记(二)

一、前言 接着上一篇文章&#xff0c;在上一篇文章中学习了如何使用数据库、如何创建集合、如何往集合里添加文档&#xff0c;今天我们继续学习一下更新文档&#xff0c;更新文档相对来说比较复杂笔者打算分多次来记录学习过程。 二、文档操作 1、更新文档 基础语法&#x…

CORDIC Translate

随便记录一下下&#xff1a; Cordic IP核使用说明以及避坑记录-CSDN博客 本次只用到了Translate&#xff0c;记录一下自己遇到的坑坑 实际配置&#xff1a; timescale 1ns / 1nsmodule cordic_tb();reg clk;wire m_axis_dout_tvalid;reg s_axis_cartesian_tvalid 0;wire [31…

SPE连接器技术革新汽车制造业

概述 新的SPE标准在汽车制造业中的应用正日益受到重视&#xff0c;它不仅推动了汽车通信技术的革新&#xff0c;还对汽车性能测试方法产生了深远影响。本文将详细探讨SPE标准在汽车制造业中的应用案例分析&#xff0c;以及它对供应链的挑战与机遇。 SPE标准在汽车制造业中的应…

ROM修改进阶教程------深度解析小米设备锁机型不解锁bl 刷写特殊类固件的步骤

在玩机过程中会遇到很多自己机型忘记密码或者手机号不用导致机型出现账号锁。无法正常使用。那么此类机型如果无法正常售后解锁。只能通过第三方渠道。例如在早期小米机型有强解bl锁资源。然后刷入完美解锁包。这种可以登陆新账号。但后期新机型只能通过修改分区来屏蔽原设备锁…

如何在idea安装git,使用gitee?

一、什么是git&#xff0c;git与gitee、GitHub的关系&#xff1f; 1.什么是git&#xff1f; Git 是一个开源的分布式版本控制系统&#xff0c;用于企业项目中程序员协同开发。 2.git与gitee、GitHub的关系是什么&#xff1f; git &#xff1a;Git是一种版本控制系统&#x…

python条件

条件语句 if语句 if...else语句 if...elif...else语句 嵌套 is is 是一个身份运算符&#xff0c;用于比较两个对象的身份&#xff0c;即它们在内存中的地址是否相同。这与比较两个对象是否相等的 运算符不同。 运算符比较的是两个对象的值是否相等。 比较对象 比较基本数据…

QGroundControl连接运行在Docker中的PX4固件模拟器

1.通过docker启动PX4无人机 docker run --rm -it jonasvautherin/px4-gazebo-headless:1.14.3 启动成功&#xff1a; PX4完全启动OK如下&#xff1a; 会看到pxh> INFO [commander] Ready for takeoff! 执行takeoff指令 查看运行docker容器与QGC客户端的主机IP&#xff1a; …

Nginx七层(应用层)反向代理:SCGI代理scgi_pass篇

Nginx七层&#xff08;应用层&#xff09;反向代理 SCGI代理scgi_pass篇 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this art…

排序(三)——归并排序(MergeSort)

欢迎来到繁星的CSDN&#xff0c;本期内容主要包括归并排序(MergeSort)的实现 一、归并排序的主要思路 归并排序和上一期讲的快速排序很像&#xff0c;都利用了分治的思想&#xff0c;将一整个数组拆成一个个小数组&#xff0c;排序完毕后进行再排序&#xff0c;直到整个数组排序…

算法金 | 来了,pandas 2.0

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 今日 210/10000 Pandas 是一个强大的数据分析库&#xff0c;广泛应用于科学研究、金融分析、商业智能等领域。它提供了高效的数据结构…

PostgreSQL 中如何解决因长事务阻塞导致的其他事务等待问题?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 PostgreSQL 中如何解决因长事务阻塞导致的其他事务等待问题&#xff1f;一、了解长事务阻塞的原因&…

Python - Word转TXT文本,或TXT文本转Word

Word文档&#xff08;.doc或.docx&#xff09;和纯文本文件&#xff08;.txt&#xff09;是两种常用的文件格式。Word文档通常用于复杂的文档处理和排版&#xff0c;而纯文本文件则用于存储和传输纯文本信息。了解如何在这两种格式之间进行转换能提高工作效率&#xff0c;并便于…

Matlab 判断直线上一点

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 判断一个点是否位于一直线上有很多方法,这里使用一种很有趣的坐标:Plucker线坐标,它的定义如下所示: 这个坐标有个很有趣的性质,我们可以使用Plucker坐标矢量构建一个Plucker矩阵: 则它与位于对应线上的齐次点…

Linux--USB驱动开发(二)插入USB后的内核执行程序

一、USB总线驱动程序的作用 a&#xff09;识别USB设备 1.1 分配地址 1.2 并告诉USB设备(set address) 1.3 发出命令获取描述符 b&#xff09;查找并安装对应的设备驱动程序 c&#xff09;提供USB读写函数 二、USB设备工作流程 由于内核自带了USB驱动,所以我们先插入一个U…