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 { foo(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
xudshen 2021-06-24 14:11:49 +08:00
arrow 的思路挺好,但是扩展函数太多了,加进来 AS 都卡了
|