Kotlin 中 apply、let、also、run的区别
apply
apply 函数接收一个目标并回来该目标自身。它答应您在目标上履行一些操作,同时仍然回来原始目标。
fun <T> T.apply(block: T.() -> Unit): T
T 是目标的类型,block 是一个 lambda 表达式,能够在该目标上履行一些操作。在这个 lambda 中,您能够运用 this 关键字来引证当时目标。
val person = Person().apply {name = "John"age = 30address = "New York"
}
在这个例子中,咱们创建了一个 Person 目标并在 apply 函数中设置了该目标的特色。最终回来的是这个 Person 目标自身。
let
let 同样是一个扩展函数,它也接收一个 Lambda 表达式作为参数。不同于 apply,在 Lambda 表达式中,let 函数将接收者目标作为 Lambda 的参数,一般用 it 作为隐式称号。let 函数的回来值是 Lambda 表达式的成果。
fun <T, R> T.let(block: (T) -> R): R
T 是目标的类型,R 是回来值的类型,block 是一个 lambda 表达式,它对该目标进行一些操作并回来一个成果。
val person = Person("Alice", 25)
val ageAfterFiveYears = person.let {it.age + 5
}
在这个示例中,let 函数用于核算 Person 目标五年后的年纪。
also
also 是一个扩展函数,与 apply 相似,但有一个关键区别:also 函数的回来值是接收者目标自身,而 Lambda 表达式的参数是接收者目标,一般用 it 作为隐式称号。
fun <T> T.also(block: (T) -> Unit): T
T 是目标的类型,block 是一个 lambda 表达式,能够在该目标上履行一些操作。在这个 lambda 中,您能够运用 it 关键字来引证当时目标。
val person = Person("Alice", 25).also {it.name = "Bob"it.age = 30
}
在上述示例中,also 函数用于修正 Person 类的特色,最终回来修正后的目标。
run
run 是一个扩展函数,它结合了 apply 和 let 的特色。run 函数在 Lambda 表达式中直接访问接收者目标的特色和方法,同时回来 Lambda 表达式的成果。
fun <T, R> T.run(block: T.() -> R): R
T 是目标的类型,R 是回来值的类型,block 是一个 lambda 表达式,它对该目标进行一些操作并回来一个成果。在这个 lambda 中,您能够运用 this 关键字来引证当时目标。
val person = Person("Alice", 25)
val greeting = person.run {"Hello, $name! You are $age years old."
}
在这个示例中,run 函数用于生成一个包括 Person 目标信息的字符串。
总结
with
不怎么使用,因为它确实不防空; 经常使用的是run和apply
- run 闭包返回结果是闭包的执行结果;apply 返回的是调用者本身。
- 使用上的差别:run 更倾向于做一些其他复杂逻辑操作,而 apply 更多的是对调用者自身配置。
- 大部分情况下,如果不是对调用者本身进行设置,我会使用 run。
相关文章:
Kotlin 中 apply、let、also、run的区别
apply apply 函数接收一个目标并回来该目标自身。它答应您在目标上履行一些操作,同时仍然回来原始目标。 fun <T> T.apply(block: T.() -> Unit): TT 是目标的类型,block 是一个 lambda 表达式,能够在该目标上履行一些操作。在这个…...
Android JKS MD5 SHA1 公钥生成 私钥生成 APP备案 内容获取
1 查看 jks keytool -list -v -keystore /Users/lipengfei/Desktop/android/androidproject.jks密钥库类型: jks 密钥库提供方: SUN您的密钥库包含 1 个条目别名: ddgj 创建日期: 2018-11-16 条目类型: PrivateKeyEntry 证书链长度: 1 证书[1]: 所有者: CNcn, OUcn, Ocn, Lcn,…...
常用linux的命令(持续更新)
1.防火墙相关 centos7 防火墙 查状态:systemctl status firewalld.service 关闭:systemctl disable firewalld.service 重启生效 关闭:systemctl stop firewalld.service 马上生效 systemctl stop firewalld 临时关闭防火墙 systemctl disabl…...
《动手学深度学习 Pytorch版》 8.7 通过时间反向传播
8.7.1 循环神经网络的梯度分析 本节主要探讨梯度相关问题,因此对模型及其表达式进行了简化,进行如下表示: h t f ( x t , h t − 1 , w h ) o t g ( h t , w o ) \begin{align} h_t&f(x_t,h_{t-1},w_h)\\ o_t&g(h_t,w_o) \end{ali…...
2023-10-20 游戏开发-cocos旧版本2.0.6-下载地址-记录
官方下载地址: Cocos Creator 下载 - 轻量高效的开发引擎 Tags cocos/cocos-engine GitHub cocos creater 旧版本: Tool/Package/REAMDE.md adofsauron/CocosCreatorFAQ - Gitee.com v2.0.6版本: Mac版:http://cocos2d-x.org/filedown/CocosStudioForMac-v2.0.…...
Python 框架学习 Django篇 (三) 链接数据库
只要你是做后端开发的,那么就离不开各种数据库,Django框架对各种数据库都非常友好,比如常见的PostgreSQL、MySQL、SQLite、Oracle,django都对他们提供了统一调用api,我们这里主要使用mysql数据库作为演示 一、ORM机制 …...
【debug】安装diffusion的bug解决合集
环境问题 ImportError: cannot import name ‘CLIPImageProcessor’ from ‘transformers’ (D:\Python\lib\site-packages\transformers_init_.py) https://github.com/huggingface/transformers/issues/23340 解决:查看更详细信息,安装环境 transfor…...
面试题 01.02. 判定是否互为字符重排
题目来源: leetcode题目,网址:面试题 01.02. 判定是否互为字符重排 - 力扣(LeetCode) 解题思路: 遍历计数即可。 解题代码: class Solution { public:bool CheckPermutation(string s1, …...
笔记39:在Pycharm中为项目添加新解释器
很久不用pycharm都生疏了 a a a 第一步:创建虚拟环境 略 a a a 第二步:将虚拟环境应用到项目中去 【File】----【Settings】----【Project:~~~】-----【Project Interpreter】----【选择合适的解释器】 因为我们要用新的解释…...
C#—VB.NET的相同点与不同点
目录 前言 一、相同之处 二、不同之处 三、总结 前言 VB.NET 和C#是两种由微软公司开发的面向对象编程语言。它们在语法上有很多相似之处,但也有一些不同之处。本文将讨论 VB.NET 和C#之间的相同之处和不同之处。 一、相同之处 1.面向对象编程语言:…...
【Edabit 算法 ★☆☆☆☆☆】【返回数组第一个元素】 Return the First Element in an Array
【Edabit 算法 ★☆☆☆☆☆】【返回数组第一个元素】 Return the First Element in an Array arrays language_fundamentals Instructions Create a function that takes an array containing only numbers and return the first element. Examples getFirstValue([1, 2, 3…...
在Qt中怎么操作MySQL数据库
一、安装驱动 (1)安装 在Qt中操作MySQL数据库首先要安装mysql的驱动文件,将MySQL下的libmusql.dll文件复制到Qt的安装路径下的bin文件夹下即可。 本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(…...
C/C++网络编程基础知识超详细讲解上部分(系统性学习day11)
目录 前言 一、网络的含义与构成 含义: 构成: 二、网络的体系结构 1>OSI七层模型 2>TCP/IP协议体系结构 3>数据经过体系结构,怎么封装? 4>端口号 5>大小端序 6>TCP/UDP传输层的协议 三、系统函数API学习框…...
chrome Driver 使用教程
ChromeDriver是一款实用的chrome浏览器驱动工具,能够用于自动化测试、网络爬虫和操作浏览器,其主要作用是模拟浏览器操作。 ## 下载地址 [Chrome for Testing availability](Chrome for Testing availability)...
目标检测YOLO实战应用案例100讲-面向恶劣环境下的多模态 行人识别
目录 前言 国内外研究现状 可见光行人目标识别 红外行人目标识别...
react-router-dom v6版本实现Tabs路由缓存切换
目录 文章目录 概要 效果 完整代码 概要 摆了半年摊,好久没写代码了,今天有人问我怎么实现React-Router-dom类似标签页缓存。后面看了一下router的官网。很久以前用的是react-router v5那个比较容易实现。v6变化挺大,但了解react的机制和rea…...
ArcGIS笔记9_数据源缺少空间参考信息?如何定义坐标系?
本文目录 前言Step 1 确定好要赋予给目标文件的恰当坐标系Step 2 定义坐标系 前言 有时从其他软件转换得到了shp文件,拖到ArcGIS后却出现“未知的空间参考:添加的数据源缺少空间参考信息 不能投影”的提示,如下图所示: 这种情况就…...
Elasticsearch实践:ELK+Kafka+Beats对日志收集平台的实现
可以在短时间内搜索和分析大量数据。 Elasticsearch 不仅仅是一个全文搜索引擎,它还提供了分布式的多用户能力,实时的分析,以及对复杂搜索语句的处理能力,使其在众多场景下,如企业搜索,日志和事件数据分析等…...
离线语音与IoT结合:智能家居发展新增长点
离线语音控制和物联网(IoT)相结合在家居中具有广泛的应用和许多优势。离线语音控制是指在设备在本地进行语音识别和处理,而不需要依赖云服务器进行处理。IoT是指借助网络,通过手机APP、小程序远程控制家居设备。 启英泰伦基于AI语…...
STM32MP135和STM32MP157的区别
本文介绍了STMicroelectronics公司推出的两款多核处理器STM32MP135和STM32MP157之间的区别,包括主频、集成硬件模块数量、内存大小和电压调节模块等方面。 STMicroelectronics是一家领先的半导体解决方案提供商,在嵌入式系统领域有着丰富的经验。他们…...
OpenMV巡线避坑指南:手把手教你用ROI分区搞定智能小车十字路口识别(附完整代码解析)
OpenMV巡线避坑实战:从ROI分区到十字路口精准识别的全流程解析 实验室里,你盯着屏幕上闪烁的OpenMV图像,小车的轨迹线时断时续,十字路口识别总是不稳定——这正是大多数智能车项目开发者都会经历的调试噩梦。本文将彻底解决这些痛…...
终极指南:用Python的Mesa框架快速构建智能体仿真模型
终极指南:用Python的Mesa框架快速构建智能体仿真模型 【免费下载链接】mesa Mesa is an open-source Python library for agent-based modeling, ideal for simulating complex systems and exploring emergent behaviors. 项目地址: https://gitcode.com/gh_mirr…...
别再被SBUS协议搞懵了!用STM32 HAL库手把手教你解析遥控器信号(附完整代码)
STM32 HAL库实战:从零解析SBUS遥控信号的全套解决方案 在无人机和机器人开发中,遥控器信号的稳定接收与解析是项目成败的关键一环。Futaba的SBUS协议因其高效的单线串联特性成为主流选择,但协议文档与实际代码实现之间往往存在令人抓狂的鸿沟…...
pandas删除指定列中有空值的行
pandas删除指定列中有空值的行mydf mydf.dropna(subset[列名],inplaceTrue)...
2026年主流面试录音转写工具大横评抗噪与转写准确率实测对比,差距竟然这么大,谁才是王者
对比了多款主流面试录音转写工具,听脑AI是综合体验最好的,不管是抗噪能力、转写准确率还是性价比,都比我试过的其他工具好出一大截,刚好最近很多HR朋友问我面试整理用什么工具,把我这次实测的结果分享给大家。 直达链…...
PCA人脸识别算法研究
PCA(主成分分析)人脸识别是一种基于统计学习的降维方法,由Matthew Turk和Alex Pentland于1991年首次系统提出并应用于人脸识别任务。这种方法通过将高维人脸图像数据映射到低维"特征脸"(Eigenfaces)子空间,显著降低了计算复杂度,同时保留了数据中的主要判别信…...
第47篇:AI提示工程高级技巧——思维链、少样本学习与角色扮演(操作教程)
文章目录前言环境准备分步操作技巧一:思维链 (Chain-of-Thought, CoT)技巧二:少样本学习 (Few-Shot Learning)技巧三:角色扮演 (Role Playing)完整代码示例:综合应用踩坑提示总结前言 在AI应用开发中,我们常常遇到这样…...
告别环境变量报错:图文详解在MacOS Ventura上为OpenJDK 11配置zsh终端
告别环境变量报错:图文详解在MacOS Ventura上为OpenJDK 11配置zsh终端 每次在终端输入java -version却只得到"command not found"的提示?作为开发者,这种挫败感我深有体会。特别是在升级到MacOS Ventura或Sonoma后,许多…...
别再死记硬背了!用Python脚本模拟XCP协议CTO/DTO报文交互(附代码)
用Python脚本玩转XCP协议:CTO/DTO报文交互实战指南 在汽车电子和嵌入式开发领域,XCP协议就像神经系统中的电信号,负责主控单元(ECU)与测试设备之间的精准通信。但面对厚达数百页的协议文档,许多工程师都会陷入"一看就懂&…...
零刻EQ12 N100双网口AIO实战:从ESXI部署到多系统融合
1. 零刻EQ12 N100双网口AIO方案解析 第一次接触零刻EQ12 N100这款小主机时,我就被它的双2.5G网口设计吸引了。这种配置在家庭网络改造和轻量级数据中心建设中简直就是神器。AIO(All In One)方案的核心思想就是把路由、存储、虚拟化等功能整合…...
