Это не ошибка котлина.a?.let { expr }
оценивается как ноль, если
- a равно нулю, или
- expr равно нулю
Если сложить все вместе, все ваше выражение будет оценено какследующим образом:
inner?.let { expr }
оценивается как ноль, потому что
inner
является нулем (случай 1 выше) , поэтому
outer?.let { ... }
оценивается как ноль (случай 2 выше), потому что то, что внутри фигурных скобок, оценивается как ноль (bullet)11.) Итак, поскольку то, что осталось от оператора
?:
, равно нулю (пункт 12), вычисляется внешнее выражение elvis.
Когда вы добавляете elvis послеinner?.let { }
, outer?.let { }
больше не возвращает ноль, возвращается Unit
, поэтому внешний elvis не оценивается.Это понятно?