news 2026/5/16 17:36:50

Kotlin 作用域函数 - let 函数、run 函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kotlin 作用域函数 - let 函数、run 函数

let 函数

1、基本介绍
@kotlin.internal.InlineOnlypublicinlinefun<T,R>T.let(block:(T)->R):R{contract{callsInPlace(block,InvocationKind.EXACTLY_ONCE)}returnblock(this)}
  1. let 是泛型扩展函数

  2. 在配合?.时,将调用者 T 对象作为参数传递给 Lambda,在 Lambda 内部通过 it 访问,避免空指针

  3. 如果不配合?.,it 可能为 null

  4. 返回 Lambda 的执行结果 R

  5. 通过 inline 关键字内联,避免函数对象开销(让编译器直接把代码“复制粘贴”到调用处,而不是真的创建一个函数对象去调用)

2、演示
  1. 这里会执行,因为对象不为 null
varstr:String?="Hello, Kotlin!"str?.let{println(it.length)}println("结束")
# 输出结果 14 结束
  1. 这里不会执行,因为对象为 null
varstr:String?=nullstr?.let{println(it.length)}println("结束")
# 输出结果 结束

run 函数

1、基本介绍
@kotlin.internal.InlineOnlypublicinlinefun<R>run(block:()->R):R{contract{callsInPlace(block,InvocationKind.EXACTLY_ONCE)}returnblock()}
@kotlin.internal.InlineOnlypublicinlinefun<T,R>T.run(block:T.()->R):R{contract{callsInPlace(block,InvocationKind.EXACTLY_ONCE)}returnblock()}
  1. run 是一个作用域函数,接收一个 lambda 表达式并在其作用域内执行

  2. run 函数分为扩展函数与非扩展函数,扩展函数对调用者 T 执行 lambda,内部通过 this 访问上下文,返回 lambda 结果,非扩展函数是独立作用域,无需上下文对象

  3. run 函数通过 inline 关键字内联,避免函数对象开销

2、演示
  1. 创建独立作用域
valresult=run{valx=10valy=20x+y}println(result)
# 输出结果 30
  1. 使用临时变量
valvalue=100valprocessed=run{valvalue=50value*2}println("外部 value:$value")println("计算结果:$processed")
# 输出结果 外部 value: 100 计算结果: 100
  1. 对象配置与计算
dataclassPerson(varname:String,varage:Int)valperson=Person("Alice",25)valresult=person.run{age+=1name="$nameSmith""姓名:$name, 年龄:$age"}println(result)
# 输出结果 姓名: Alice Smith, 年龄: 26
  1. 空安全检查
valcontent:String?="Hello"vallength=content?.run{println("字符串:$this")length}?:0println(length)
# 输出结果 字符串: Hello 5
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 6:45:03

SSM智能物流管理系统k852w(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面

系统程序文件列表系统项目功能&#xff1a;用户,运输公司,发布货源,路线规划,货源处理,到货确认SSM智能物流管理系统开题报告一、课题研究背景与意义&#xff08;一&#xff09;研究背景随着物流行业的快速发展和数字化转型加速&#xff0c;传统物流管理模式已难以适应行业高效…

作者头像 李华
网站建设 2026/4/30 10:52:08

智能气候控制箱控制系统设计

一、设计目标与核心指标 1. 核心目标 实现温湿度、CO₂浓度、光照的多参数协同精准控制支持本地操作与远程物联网监控双重模式兼顾低成本与高性能&#xff0c;适配实验室、农业育苗、工业存储等多场景构建“感知-决策-执行-反馈”全闭环控制体系 2. 关键技术指标 控制参数范…

作者头像 李华
网站建设 2026/5/15 22:11:11

一周时间搭建企业级Agent开发平台!完整技术方案+代码实现,建议收藏

文章详细记录了作者如何在一周时间内为内部研发平台接入Agent开发能力的技术实践。内容涵盖技术选型&#xff08;Faas、Next.jsReact、LangGraph&#xff09;、系统提示词优化、知识库建设&#xff08;RAG&#xff09;、工具接入以及上下文管理等关键技术点。重点解决了连续对话…

作者头像 李华
网站建设 2026/5/10 22:12:30

JOULWATT杰华特 JW7201DFNK#TRPBF DFN4*3-14 控制器

特性• 输入电压范围为 6V 至 80V • 双通道输入和驱动 • 360μA 静态电流 • 具有mosfet故障检测/保险丝故障检测/供电故障检测 • 0.3us的快速关断时间限制峰值故障电流 • 采用 DFN4*3-14和SOP16 封装

作者头像 李华
网站建设 2026/5/16 6:44:42

降低AI查重率:从“被标红”到“稳过检”的真实突围战

导语写论文时最慌的瞬间是什么&#xff1f;我去年改硕士论文时&#xff0c;对着电脑屏幕上的AIGC检测报告直冒冷汗——32%的“AI生成可能性”&#xff0c;红框框像小刀子扎在“文献综述”和“研究方法”段。后来我摸透门道&#xff1a;降低AI查重率从不是“把文字改得面目全非”…

作者头像 李华