news 2026/6/21 13:20:23

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/6/13 21:14:08

如何通过 C# 将 TXT 文本转换为 PDF

在日常开发和办公场景中&#xff0c;将纯文本&#xff08;TXT&#xff09;格式转换为 PDF 格式是常见需求。PDF 格式具备跨平台、格式稳定、不易篡改的特性&#xff0c;而 TXT 则更侧重内容存储&#xff0c;二者的格式转换能兼顾内容可读性与传播规范性。本文将介绍如何通过 C#…

作者头像 李华
网站建设 2026/6/20 6:28:21

【计算机毕设】4S店车辆管理系统

&#x1f49f;博主&#xff1a;程序员小俊&#xff1a;CSDN作者、博客专家、全栈领域优质创作者 &#x1f49f;专注于计算机毕业设计&#xff0c;大数据、深度学习、Java、小程序、python、安卓等技术领域 &#x1f4f2;文章末尾获取源码数据库 &#x1f308;还有大家在毕设选题…

作者头像 李华
网站建设 2026/6/18 17:44:10

【深度学习新浪潮】如何评价Kaiming He新作《Generative Modeling via Drifting》?

核心结论:这篇论文由邓明扬一作、何恺明团队于2026年2月4日发表在arXiv上,提出了Drifting Models这一全新生成建模范式,其核心创新在于将推理时的迭代过程转移到训练阶段,实现了单步(1-NFE)生成的SOTA性能,同时在理论上建立了清晰的物理直觉与数学平衡条件,为生成模型的效…

作者头像 李华
网站建设 2026/6/20 4:58:05

智能天窗设计

智能天窗设计与实现 第一章 设计背景与核心目标 传统汽车或家居天窗多依赖手动开关或固定档位控制&#xff0c;存在操作不便、无法根据环境变化自适应调节、缺乏防夹手与雨水防护等问题&#xff0c;难以满足现代用户对便捷性、安全性与智能化的使用需求。尤其在突发降雨、强光…

作者头像 李华
网站建设 2026/6/13 14:36:41

智能手套设计

智能手套设计与实现 第一章 设计背景与核心目标 传统手套仅具备保暖、防护等基础功能&#xff0c;缺乏环境感知、健康监测、智能交互等拓展能力&#xff0c;难以满足现代人群在户外探险、运动健身、健康管理等场景的多元化需求。智能手套依托柔性传感、低功耗电子与物联网技术&…

作者头像 李华
网站建设 2026/6/13 22:21:30

可焊性测试(SD)对LED车灯稳定性评估

引言在汽车电子制造领域&#xff0c;焊接质量是决定元器件与电路板连接可靠性的关键环节。对于LED车灯而言&#xff0c;其引线框架、支架或封装基板的可焊性直接决定了焊接工艺的稳定性与长期性能。AEC-Q102作为车用LED器件的国际权威可靠性认证标准&#xff0c;其中的"可…

作者头像 李华