kotlin - 对多个变量进行空检查
问题描述
是否可以在 Kotlin 中重新格式化这段代码,让它变得更小一些?如果 A 和 B 都不等于 null,则该函数应将 A 和 B 作为 Pair 返回。否则它应该返回 null。我的第一个想法是这样的:
private fun <A, B> zip(a: A?, b: B?): Pair<A, B>? =
if (a != null && b != null)
a to b
else
null
然后我决定使用 Elvis Operator。所以它现在看起来像这样:
private fun <A, B> zip(a: A?, b: B?): Pair<A, B>? {
a ?: return null
b ?: return null
return a to b
}
但我正在寻找的是这样的:
private fun <A, B> zip(a: A?, b: B?): Pair<A, B>? =
// This code obviously doesn't compile but is their any way to do it similar to this?
a, b ?: return null
return a to b
提前致谢!
解决方案
一个相当简洁的选择是创建 Pair 然后过滤它:
(a to b).takeIf{ a != null && b != null }
但这不是很好:它有时会不必要地创建一个 Pair,并且结果类型将使 Pair 参数都可以为空,即使您知道它们不能为空。
您可以编写一个扩展函数以使其更简单。
否则,我认为你不能做得比:
if (a != null && b != null) a to b else null
它稍微长一点,但效率更高,打字更严格。
推荐阅读
- reactjs - react-router-dom 链接在反应传单自定义弹出窗口中不起作用
- shell - 未通过 SFTP get 命令返回多变量字符串
- perl - 如何使用perl从特殊字符串中提取子集
- python - tkinter 中 B = Button(....).grid() 和 B = Button(...) B.grid() 有什么区别
- php - 如何修复 XAMPP“Apache / mysql 意外关闭”错误
- python - Django 检索不同列值的行
- java - 有一种方法可以用我要求的不同方法来验证 API 响应吗?
- c++ - 填充 unordered_set 的更有效方法?
- python - Python理解递归程序
- firebase - Flutter 文档快照