当前位置: 首页 > news >正文

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不怎么使用,因为它确实不防空; 经常使用的是runapply

  1. run 闭包返回结果是闭包的执行结果;apply 返回的是调用者本身。
  2. 使用上的差别:run 更倾向于做一些其他复杂逻辑操作,而 apply 更多的是对调用者自身配置。
  3. 大部分情况下,如果不是对调用者本身进行设置,我会使用 run。

相关文章:

Kotlin 中 apply、let、also、run的区别

apply apply 函数接收一个目标并回来该目标自身。它答应您在目标上履行一些操作&#xff0c;同时仍然回来原始目标。 fun <T> T.apply(block: T.() -> Unit): TT 是目标的类型&#xff0c;block 是一个 lambda 表达式&#xff0c;能够在该目标上履行一些操作。在这个…...

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 防火墙 查状态&#xff1a;systemctl status firewalld.service 关闭&#xff1a;systemctl disable firewalld.service 重启生效 关闭&#xff1a;systemctl stop firewalld.service 马上生效 systemctl stop firewalld 临时关闭防火墙 systemctl disabl…...

《动手学深度学习 Pytorch版》 8.7 通过时间反向传播

8.7.1 循环神经网络的梯度分析 本节主要探讨梯度相关问题&#xff0c;因此对模型及其表达式进行了简化&#xff0c;进行如下表示&#xff1a; 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版&#xff1a;http://cocos2d-x.org/filedown/CocosStudioForMac-v2.0.…...

Python 框架学习 Django篇 (三) 链接数据库

只要你是做后端开发的&#xff0c;那么就离不开各种数据库&#xff0c;Django框架对各种数据库都非常友好&#xff0c;比如常见的PostgreSQL、MySQL、SQLite、Oracle&#xff0c;django都对他们提供了统一调用api&#xff0c;我们这里主要使用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 解决&#xff1a;查看更详细信息&#xff0c;安装环境 transfor…...

面试题 01.02. 判定是否互为字符重排

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;面试题 01.02. 判定是否互为字符重排 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 遍历计数即可。 解题代码&#xff1a; class Solution { public:bool CheckPermutation(string s1, …...

笔记39:在Pycharm中为项目添加新解释器

很久不用pycharm都生疏了 a a a 第一步&#xff1a;创建虚拟环境 略 a a a 第二步&#xff1a;将虚拟环境应用到项目中去 【File】----【Settings】----【Project:~~~】-----【Project Interpreter】----【选择合适的解释器】 ​​​​​​​ 因为我们要用新的解释…...

C#—VB.NET的相同点与不同点

目录 前言 一、相同之处 二、不同之处 三、总结 前言 VB.NET 和C#是两种由微软公司开发的面向对象编程语言。它们在语法上有很多相似之处&#xff0c;但也有一些不同之处。本文将讨论 VB.NET 和C#之间的相同之处和不同之处。 一、相同之处 1.面向对象编程语言&#xff1a…...

【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数据库

一、安装驱动 &#xff08;1&#xff09;安装 在Qt中操作MySQL数据库首先要安装mysql的驱动文件&#xff0c;将MySQL下的libmusql.dll文件复制到Qt的安装路径下的bin文件夹下即可。 本文福利&#xff0c;莬费领取Qt开发学习资料包、技术视频&#xff0c;内容包括&#xff08;…...

C/C++网络编程基础知识超详细讲解上部分(系统性学习day11)

目录 前言 一、网络的含义与构成 含义&#xff1a; 构成&#xff1a; 二、网络的体系结构 1>OSI七层模型 2>TCP/IP协议体系结构 3>数据经过体系结构&#xff0c;怎么封装? 4>端口号 5>大小端序 6>TCP/UDP传输层的协议 三、系统函数API学习框…...

chrome Driver 使用教程

ChromeDriver是一款实用的chrome浏览器驱动工具,能够用于自动化测试、网络爬虫和操作浏览器,其主要作用是模拟浏览器操作。 ## 下载地址 [Chrome for Testing availability]&#xff08;Chrome for Testing availability&#xff09;...

目标检测YOLO实战应用案例100讲-面向恶劣环境下的多模态 行人识别

目录 前言 国内外研究现状 可见光行人目标识别 红外行人目标识别...

react-router-dom v6版本实现Tabs路由缓存切换

目录 文章目录 概要 效果 完整代码 概要 摆了半年摊&#xff0c;好久没写代码了&#xff0c;今天有人问我怎么实现React-Router-dom类似标签页缓存。后面看了一下router的官网。很久以前用的是react-router v5那个比较容易实现。v6变化挺大&#xff0c;但了解react的机制和rea…...

ArcGIS笔记9_数据源缺少空间参考信息?如何定义坐标系?

本文目录 前言Step 1 确定好要赋予给目标文件的恰当坐标系Step 2 定义坐标系 前言 有时从其他软件转换得到了shp文件&#xff0c;拖到ArcGIS后却出现“未知的空间参考&#xff1a;添加的数据源缺少空间参考信息 不能投影”的提示&#xff0c;如下图所示&#xff1a; 这种情况就…...

Elasticsearch实践:ELK+Kafka+Beats对日志收集平台的实现

可以在短时间内搜索和分析大量数据。 Elasticsearch 不仅仅是一个全文搜索引擎&#xff0c;它还提供了分布式的多用户能力&#xff0c;实时的分析&#xff0c;以及对复杂搜索语句的处理能力&#xff0c;使其在众多场景下&#xff0c;如企业搜索&#xff0c;日志和事件数据分析等…...

离线语音与IoT结合:智能家居发展新增长点

离线语音控制和物联网&#xff08;IoT&#xff09;相结合在家居中具有广泛的应用和许多优势。离线语音控制是指在设备在本地进行语音识别和处理&#xff0c;而不需要依赖云服务器进行处理。IoT是指借助网络&#xff0c;通过手机APP、小程序远程控制家居设备。 启英泰伦基于AI语…...

STM32MP135和STM32MP157的区别

本文介绍了STMicroelectronics公司推出的两款多核处理器STM32MP135和STM32MP157之间的区别&#xff0c;包括主频、集成硬件模块数量、内存大小和电压调节模块等方面。 STMicroelectronics是一家领先的半导体解决方案提供商&#xff0c;在嵌入式系统领域有着丰富的经验。他们…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

macOS 终端智能代理检测

&#x1f9e0; 终端智能代理检测&#xff1a;自动判断是否需要设置代理访问 GitHub 在开发中&#xff0c;使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新&#xff0c;例如&#xff1a; fatal: unable to access https://github.com/ohmyzsh/oh…...

跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践

在电商行业蓬勃发展的当下&#xff0c;多平台运营已成为众多商家的必然选择。然而&#xff0c;不同电商平台在商品数据接口方面存在差异&#xff0c;导致商家在跨平台运营时面临诸多挑战&#xff0c;如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...

Python环境安装与虚拟环境配置详解

本文档旨在为Python开发者提供一站式的环境安装与虚拟环境配置指南&#xff0c;适用于Windows、macOS和Linux系统。无论你是初学者还是有经验的开发者&#xff0c;都能在此找到适合自己的环境搭建方法和常见问题的解决方案。 快速开始 一分钟快速安装与虚拟环境配置 # macOS/…...

Docker、Wsl 打包迁移环境

电脑需要开启wsl2 可以使用wsl -v 查看当前的版本 wsl -v WSL 版本&#xff1a; 2.2.4.0 内核版本&#xff1a; 5.15.153.1-2 WSLg 版本&#xff1a; 1.0.61 MSRDC 版本&#xff1a; 1.2.5326 Direct3D 版本&#xff1a; 1.611.1-81528511 DXCore 版本&#xff1a; 10.0.2609…...