Вы также можете использовать это для произвольного числа аргументов:
fun <P, R> nLet(vararg ts: P?, block: (Array<out P?>) -> R): R? =
ts.takeIf { it.none { it == null } }?.let { block(it) }
Использование:
nLet(foo, bar, dog) { (f, b, d) -> doStuff(f, b, d) }
Это работает, но f
, b
и d
будет иметь обнуляемые типы, даже если они не могут быть нулевыми.
(может быть разумный способ решить это ...)