kotlin - 具有少于预期组件的组件解构
问题描述
假设我想做以下事情:
val (k, v) = pair.split("=".toRegex(), 2)
如果我总是从拆分中获取 2 个组件,则此代码很好 - 但是,如果字符串中不存在分隔符,则此代码将引发异常,因为数组中的第二个元素不存在。
答案几乎肯定是“不”,但有没有办法强制解构为缺失的组件分配空值?
解决方案
解构对象时,Kotlin 调用componentN()
该对象。对于数组,component1()
等于get(0)
,component2()
等于get(1)
,依此类推。
因此,如果索引超出范围,它将抛出ArrayIndexOutOfBoundsException
,而不是返回null
。
但是您可以使您的操作员功能如下:
operator fun <T> Array<out T>.component1(): T? = if (size > 0) get(0) else null
operator fun <T> Array<out T>.component2(): T? = if (size > 1) get(1) else null
所以如果我跑
val (k, v) = arrayOf(1)
println(k)
println(v)
输出将是
1
null
看:
推荐阅读
- xmlhttprequest - XHR 和 XSL - Promise Chaining 和 transformToFragment 为空
- java - 出现错误:线程“main”中的异常 java.net.SocketException:连接重置
- google-cloud-platform - 谷歌云 - 部署管理器:使用配置单元分区创建外部表
- python - 将列表中的第一个元素设置为最后一个 python
- json - Flutter 如何获取列表
_list 使用 JSON 的来自 Rest API 的数组字符串 - javascript - 如何将输入表单中的值绑定到 jsx 中的组件?该函数在 appjs 内部,我需要弄清楚如何将状态设置为 jsx
- powershell - Powershell - 使用 TSSession 的结果好坏参半
- nginx - Web 服务器和反向代理在同一个端口 nginx
- go - 简单程序死机,无法确定原因
- datatable - 有条件地格式化 Dash 数据表中的值 (Julia)