class A class B val a: A? = null val b: B? = null fun foo(a: A, b: B) { println(a) println(b) } suspend fun main() { a?.let { b?.let { foo(a, b) } } }
除了a?.let { b?.let { oo(a, b) } }
这种形式和 if a!= null && b!= null
,还有啥其他好办法吗?
现在找到一个 arrow 库可以用 option dsl 实现比较漂亮的包装
option { foo(a.bind(), b.bind()) }
![]() | 1 thetbw 2021-06-23 14:53:42 +08:00 直接 if(a!=null && b!= null)不也蛮简单的吗 |
![]() | 2 Kamiyu0087 2021-06-23 16:30:53 +08:00 这种我选择直接用 if |
3 xloger 2021-06-24 10:25:14 +08:00 我觉得这种时候用 if 就是最好的方案,但如果你非要实现形如 let 的调用方式,可以自己写一个 Object? 的拓展函数实现。接收不定长的参数和一个条件为真时执行的函数。 |
4 thinkfeed 2021-06-24 10:36:04 +08:00 ```kotlin inline fun <R> notNull(vararg args: Any?, block: () -> R) = when { args.filterNotNull().size == args.size -> block() else -> null } ``` 可以试试这个方法 |
![]() | 5 ozking 2021-06-24 14:11:49 +08:00 arrow 的思路挺好,但是扩展函数太多了,加进来 AS 都卡了 |