Да, это правильно, если последний оператор лямбда является выражением, считается его возвращаемым значением.
Вот what the reference says (спасибо @KirillRakhman):
Мы можем явно возвращать значение из лямбда с использованием синтаксиса qualified return. В противном случае значение последнего выражения будет принудительно возвращено. Таким образом, две следующие фрагменты кода эквивалентны:
ints.filter {
val shouldFilter = it > 0
shouldFilter
}
ints.filter {
val shouldFilter = it > 0
[email protected] shouldFilter
}
Последнее утверждение семантику также верно для if
(that's why there's no ternary operator), when
и try
-catch
блоков, и эти заявления являются выражением себя:
val foo = if (bar) {
doSomething()
baz
} else {
doSomethingElse()
qux
}
См. Также: examples for when
and try
-catch
.
Итак, лямбда согласуется с языковыми конструкциями в этом отношении.
Если вы хотите сделать явное return
заявление в лямбда, используйте [email protected]
syntax (также, another answer with examples). Немаркированный return
, напротив, работает с ближайшим fun
(игнорируя лямбда) и, следовательно, может произойти только в тех лямбдах, которые являются inlined.
Чтобы добавить специальный синтаксис для , введите значение из кодового блока, но оно было отклонено.
Полезный совет: вы можете сократить это значение до значения val numsPlusOne = nums.map {it + 1} '(потому что' it' подразумевается, если не указано, и если 'it + 1' является последней строкой, результат будет возвращен как пояснил @hotkey) –